[질문] Qt를 개발하며 알게된 문제들

shint의 이미지

회사 업무로 Qt를 하게 되었는데요.
UI 디자인이 코드와 매칭되서 개발하기 편하다.는 장점이 있기는 하지만. 컴파일이 느린 단점이 있습니다.
UI 하나 바꾸는데도 1~2분이상 기다려야하는데. 이건 UI를 분리하지 않고 개발한 개발방식의 문제이기도 한것 같습니다.

그래서. 느린 빌드를 벗어나고자. VS로 빌드하지만. 문제는 여기서 끝나지 않고.
VS를 고려하지 않고 Qt에서 개발한 소스는 UI에서 ASSERT 에러와 같은 오류가 튀어나오는 경우도 있었습니다.

게다가. VS로 빌드한걸 Qt에서 사용할경우. 이상하게 UI를 VS에서 빌드한 후에 Qt에서 빌드해야 적용되는 문제도 있었는데요.
그뿐만 아니라. Qt에서 저장된 소스가 다른 폴더에 저장된 프로젝트를 변경하거나 프로젝트 저장 자체가 안돼서 날리는 희안한 경험도 있었습니다. 물론. 그건. HASP같은 보안키 프로그램을 설치한 이후의 이야기라서 (물론. 프로세스를 종료하긴했었지만) 좀 다를지 모릅니다.

한마디로. UI 글자 하나 바꾸는데 VS 빌드하고 Qt 빌드 또 하고 해야 확인이 가능한데.
그렇게 5분이 걸립니다.
글자 10개 바꾸면 한시간 지나가니. 이렇게는 개발 못한다고 판단했습니다.

문제 해결을 위해서는
1. 지금의 뭉쳐진 UI를 더욱 나눠서 빌드 시간을 줄인다. - 이건. 프로젝트 새로 만드는것 같아서 부담됩니다.
2. VS에서 빌드를 해야 UI변경이 적용되는 문제. - UI를 나눠서 Qt 빌드가 빨라지면 VS를 안쓰니. 문제도 없어질거라 생각됩니다.
3. 고성능 PC를 구입한다. - 이건 돈도 없을뿐더러. 하드레이드 걸고 오버한 CPU로 4.4나와도 빌드 시간이 크게 줄어들것 같지는 않아보입니다.

간단한 빌드는 어느정도 빠르게 나와야하는데.... 참... 곤란합니다.
Qt를 좀더 빠르고 안정적으로 사용하는 방법. 아시는분 조언 부탁드립니다.

M.W.Park의 이미지

Qt도 pch 지원됩니다.
pch는 조금 설정들을 바꾸어주어야하구요.

make 시에 -j 옵션은 사용하고 있는지요?
"make -j core 수 * 2" 정도로 하면 좀 빨라졌던 것으로 기억합니다.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

shint의 이미지

한번 확인해 봐야겠네요. -j 옵션은 몰랐습니다.;;;;

Ctrl+R 만 사용하고 있었는데요.
리빌드 하는것 같은 생각이 계속 들드라구요.

그런데. UI변경할때만 그런 현상이 두드러지는거 같아서요.
코드 자체는 빠르게 적용되는것도 봤구요.

//
말씀하신대로 Projects 탭에서 컴파일 인자값을 적용했더니
컴퓨터가 미친듯이 컴파일을 하는군요;;;;; 하지만 시간은 비슷하네요 ㅠㅠ;;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

semmal의 이미지

그냥 UI 사용하지마시고 코딩으로 만드시죠?

적당한 레이아웃만 미리 나와있다면 별로 어렵지 않은 일일텐데요.

------------------------------
How many legs does a dog have?

shint의 이미지

그 말씀대로 해보겠습니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

semmal의 이미지

UI 보내주세요 그정도도 못하시면 제가 해드리죠

------------------------------
How many legs does a dog have?

shint의 이미지

일단 회사에 연락해서 승인은 얻은 상태입니다.
요번주에 가능하시면 연락주세요. 010-5005-6046 신우섭 입니다.
충북 청원군 내수읍 마산리에 살고 있습니다.
원격으로도 가능하다면 봐주셨으면 합니다.
직접 와주실 수 있다면 더 감사하겠습니다. 부족하더라도 교통비정도는 드리겠습니다.
더 나은 개발 방식을 배울 수 있는 좋은 기회를 주셔서 감사하게 생각합니다.

Qt를 하면서 저와 같은 문제에 직면하신 분들이 겪게 되는 문제에 대해 나은 방법을 찾았으면 하는데요.
설마. 글자 한두개 바꾸는게 어려워서 이런글까지 썼다고 생각하시는 분은 아니시길 바랍니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

shint의 이미지

//
말씀하신 내용은 디자이너를 쓰지말고.
ui를 code로 처리할 경우 속도가 개선된다는 말씀이셨네요.

ui자체로 코딩하는 습관을 길러야할지. ui기능을 활용해야할지. 고민되는군요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

klyx의 이미지

혹시 ui_*.h 파일을 해더파일에서 인클루드하고 계신가요?
만약 그렇다면 전방선언등을 이용하여 해더파일에서 빼서 cpp에서 인클루드하게끔 바꾸는 것만으로도 획기적으로 빨라질것 같습니다.
한글자바꿨는데 줄줄이 컴파일한다는건, 해더파일간의 의존성이 너무 많다는 뜻같습니다.

디자이너를 쓰느냐 안쓰느냐에 따른 속도차이는 uic를 한번 통하느냐 마느냐의차이인데, 시간 재봐야 겠지만, 이걸 손코딩한다고 획기적으로 빨라질거같지는 않습니다.

마지막으로 'VS빌드하고 Qt빌드한다'가 무슨뜻인지 모르겠네요.

shint의 이미지

말씀하신게 맞습니다. 현재 저희 프로젝트는
ui_main.h - project.h - project_a.cpp
ui_main.h - project.h - project_b.cpp
ui_main.h - project.h - project_c.cpp 이런식으로 되어있습니다.

이걸
ui_main.h - project_a.h - project_a.cpp
ui_main.h - project_b.h - project_b.cpp
ui_main.h - project_c.h - project_c.cpp 이렇게 바꿔볼까 생각했었는데요.

말씀하신대로 라면
ui_main.h - project_a.cpp
ui_main.h - project_b.cpp
ui_main.h - project_c.cpp 이런식이 될것 같습니다. 같은건가요??

현재 사용하는 project class가 하나로 되어있고.
각 함수가 ui나 참조하는 함수정보를 포함하고 있는 부분을 처리해주는 작업을 하면 될것 같습니다.

//VS빌드하고 Qt빌드한다'는 말의 의미는.
- VS2008에서 컴파일해야 변경된 UI가 적용되는 이상한 현상과
- VS2008로 컴파일한 소스는 UI의 테이블 에디트시 ASSERT 에러가 발생했습니다.

그래서. 일단. 빠른 컴파일과. UI를 변경하기 위해. VS2008에서 컴파일했습니다.
그리고. VS2008로 컴파일한것은 ASSER 에러가 나니까. Qt에서 다시 빌드하는 방법을 사용했었던걸 말합니다.

사실. Qt로만 했으면 이렇게 복잡하지 않아도 되는건데. Qt 컴파일속도를 좀 더 개선해보고 싶은 욕심도 있었고.
Qwt를 컴파일해서 lib를 얻는중에 VS2008 이 필요한것도 있었고해서 해봤습니다.

여러분이 좋은 답변 주셔서 감사하게 생각합니다. ㅇ_ㅇ'''

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

klyx의 이미지

ui_*.h 안의 내용들은 보통 private영역의 것들인데, 이것이 세군데에서나 include된다는 게 좀 걸리네요.
project_*.cpp라는 것들은 한 클래스에 대한 구현인가요?
그게 아니라면 ui클래스를 따로 선언해서 필요한 부분한 public으로 뽑아 쓰는게 좋을것 같습니다.

shint의 이미지

하나의 클래스와 하나의 UI에 모두 걸린 상태입니다.
나눠서 분리하려니 조금 식겁한 상황입니다. ㅠㅠ;;;;;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.