본문 바로가기
코드

VisualStudio 2005에서 QT 작업하기

by ehei 2006. 7. 6.

목차

QT를 VS용으로 컴파일하기

VS에서 작업하기

UI 파일이 컴파일되지 않을 경우

QWidget을 상속받는 클래스를 사용할 때

 

 

QT를 VS용으로 컴파일하기

 


이 글은 
아래 링크 중의 글에서 중요한 내용만 추리고, 약간의 주석을 단 것이다.

 

http://www.qtnode.net/wiki/Qt4_with_Visual_Studio

먼 저 QT 라이브러리를 받아야 한다. 단 소스 파일을 받아야 한다. 위 링크에도 받을 수 있는 경로가 있다. 아니면 제작사인 TrollTech 홈페이지에서 받아도 된다. 어쨌든 소스가 있어야 다시 컴파일을 할 수 있다. 트롤테크가 제공하는 바이너리 파일에서 lib 파일이 없다. 한편, 컴파일된 파일을 올리기에는 너무 용량이 크다. 컴파일 후 용량이 1.2GB에 달한다는 사실만 알아두면 되겠다.

위 링크로  가면 QT를 비주얼 스튜디오에서 작업할 수 있는 패치가 있다. 그리고 컴파일 방법도 알려준다. 그대로 컴파일하면 된다.

컴파일이 완료되면 QT/4.1.3/bin 밑에 중요한 세 개 파일이 있다. 작업하면서 자주 참조하게 될 것이다.

  • assistant: 도움말
  • designer: UI 편집기
  • qtdemo: 데모 모음. 소스도 포함

이제 VS에서 실제로 사용해보자. designer를 실행시켜 간단히 화면을 구성하고 저장하자. 저장할 때는 반드시 작업 폴더를 만들어서 해야한다. 이유인즉, 곧 실행해야 하는 qmake가 하위 폴더에 있는 ui 파일을 검색하여 프로젝트에 추가하기 때문이다.

프롬프트 창을 연 후, 저장한 폴더로 가서 아래 명령을 실행하자. 그러면 VS 프로젝트 파일이 생성된다.

 

PROMPT>qmake -project -t vcapp -o [project name].pro

PROMPT>qmake

이제 vcproj 파일이 생성되었다. 클릭한 후 변환하면 된다.


! VS에서 작업하기



편집창을 보면 아무 파일도 보이지 않는다. 컴파일을 해보자. 그러면 프로젝트가 위치한 폴더에 Ui_xxxx.h 파일이 생성된다(VS의 외부 컴파일 실행 명령으로, UI 파일을 헤더 파일로 바꾼 것이다. VS에서 자동으로 변환해주므로 걱정할 필요 없다. 참고로 프롬프트 창에서 수작업으로 바꾸려면 다음과 같이 해야 한다. uic -o <file name>.h <file name>.ui)

생 성된 헤더 파일을 프로젝트에 추가하여 열면 내용을 볼 수 있다. main()이 없으므로 실행되지 않는다. 소스 파일을 생성하여 다음과 같이 추가하면 실행된다. 아래 소스는 UI 편집기에서 MainWindow를 베이스로 사용했다. 디자이너에서 베이스를 무엇을 썼느냐에 따라 QMainWindow 부분을 바꿔야 한다. 예를 들어, Dialog로 생성했으면 MainWindow를 모두 Dialog로 대체한다.

#include "MainWindow.h"

int main( int argc, char * argv[] )
{
    QApplication app(argc, argv);
    QMainWindow * window = new QMainWindow;
    
    Ui::MainWindow ui;
    ui.setupUi( window );
    
    window->show();
    return app.exec ();
}

컴 파일하면 실행이 된다. 그러나, 수시로 UI를 수정할 경우 위와 같이 하면 많은 무리가 따른다. 왜냐하면, 내가 추가한 메소드나 속성을 헤더 파일에 넣어야 하기 때문이다. C++은 아직 partial class가 지원되지 않는 덕이다. UI를 수정하면 Ui_xxxx.h이 새로 생성되고 이전 내용은 날아가버린다. 그러므로, 반드시 UI 클래스를 상속받아서 써야 한다. 위 소스의 경우에는 QT가 생성한 클래스 이름은 Ui_MainWindow이다. 이걸 상속해야 한다.

또 한가지, QT가 생성한 프로젝트 파일은 precompiled header를 사용하지 않는다. 그래서, 프로젝트가 커지면 컴파일 속도가 느려진다.

아래는 소스 파일이다.

 

QtFrameWork.zip


 



 

 

! UI 파일이 컴파일되지 않을 경우

 

  1. VS에서 ui 파일의 속성창을 연다. ui 파일에 오른쪽 클릭.
  2. Configuration Property >> Custom Build Step >> General 로 이동한다.
  3. 잘못된 경로 정보를 올바르게 수정한다.

 

! QWidget을 상속받는 클래스를 사용할 때

 

 

QWidget을 상속받는 클래스는 Q_OBJECT라는 매크로를 클래스 선언부분에 앞서 사용해야 한다.

 

class MyWidget : public QWidget

{

     Q_OBJECT

        ....

}

 

Q_OBJECT는 MOC(Meta Object Compiler)라는 프로그램으로 실제 코드로 바뀐다. 레퍼런스에서는 MOC 파일이라고 부르는데, 이 코드를 만드려면, VS 프로젝트 파일을 생성하는 과정을 반복하면 된다. 즉, 아래와 같다.

 

PROMPT>qmake -project -t vcapp -o [project name].pro

PROMPT>qmake

이렇게 한 후 컴파일하면, 자동으로 MOC 파일을 만들어준다. 그러나 include는 하지 않으므로 직접 해주어야 한다. 그러나, 이렇게 파일을 만들면 웬일인지 코드를 참조하지 못하는 경우가 생긴다(최소한 내 경우에는). 게다가, 이렇게 만들면 전에 설정했던 프로젝트 속성이 초기로 돌아간다. 대신 MOC를 수작업으로 만들어주면 된다. 만일 변환할 파일이 MyWidget.h라고 하자.

 

moc -o MyWidget.moc MyWidget.h

 

이제 MyWidget.cpp 에서 다음과 같이 include하면 된다.

 

#include "MyWidget.moc"

 

그러면 정상적으로 실행이 되며, 코드를 수정할 필요도 없어진다.

'코드' 카테고리의 다른 글

CQ 빌더  (0) 2006.08.01
버텍스 회전 이용하기  (0) 2006.07.08
AABB 충돌 검사 방식에서의 정확한 구 검출  (0) 2006.07.06
빌보드 및 폰트 표시 테스트  (0) 2006.06.29
SubEntity의 메쉬에서 버텍스 정보 얻기  (0) 2006.06.29