본문 바로가기
나/끄적

Qt로 개발하면서 배운 점

by ehei 2006. 8. 1.

비주얼 스튜디오에서 쉽게 폼을 헤더로 변환하기

  • Qt Designer에서 생성한 *.ui 파일은 프로그램에서 쓰려면 헤더 파일로 바꾸어야 한다. 이렇게 쓰면 쉽게 사용가능하다. 예로 about.ui를 바꿔보자.
    • ui 파일을 솔루션에 등록한다.
    • ui 파일의 속성창을 열고, General > Tool 값을 Custom Build Tool로 설정한다
    • Custom Build Step으로 가서, Command Line에 이렇게 값을 넣는다. c:\Qt\4.1.3\bin\uic.exe About.ui -o ui_About.h(디렉토리는 uic.exe가 있는 곳으로 바꾸어야 한다)
    • output을 ui_about.h로 설정한다.
    • Additinal Dependency 값은 c:\Qt\4.1.3\bin\uic.exe로 설정(역시 디렉토리 확인)
    • 그러면 Qt Designer에서 폼을 변경한 후, 비주얼 스튜디오에서 간단히 사용 가능하다.

 

 

실수하기 좋은 사항

  • 헤더에 슬롯을 정의한 후에는 반드시 moc <header name>.h -o <output name> 를 한다. 그리고 출력 파일을 소스에 포함시켜야 한다.
    • 예: moc MainWindow.h -o moc_MainWindow.h
    • 소스에 포함: #include "moc_MainWindow.h"
  • connect할 때는 항상 주의해야 한다. SLOT과 SIGNAL은 매크로이므로 this-> 포인터를 붙이거나 심지어는 이름이 잘못되어도 컴파일 타임에 오류가 발생하지 않는다. 심지어 런타임에도 오류가 없다. 다만 실행이 되지 않을 뿐...
  • SIGNAL에 연결되는 SLOT 함수를 만들 때는 고민을 해야한다. 왜냐하면 SLOT이 Qt의 폼에 있는 값을 바꿀 경우 다음과 같은 재수없는 상황이 발생할 수 있다.
    • 나같은 경우에는 슬라이더와 에디트박스를 만들고, 슬라이더를 옮기면 에디트박스 값이 바뀌고, 에디트 박스 값을 바꿔도 슬라이더가 옮겨지게 만들었다. 덕분에, 연연쇄 호출이 발생하여 스택 오버플로가 발생하여 프로그램이 죽거나 튕긴다. hasFocus()를 체크해서 막거나, 그렇게 되지 않게 설계를 하라.

' > 끄적' 카테고리의 다른 글

집에 오다  (0) 2009.09.02
나 자신을 낭비했다...  (0) 2007.05.02
게임에서 음향이 중요한 까닭  (0) 2006.11.19
게임 회사에 입사하다  (0) 2006.11.19
무료 통계 소프트웨어: R  (0) 2006.03.15