좀더 비주얼한 QT 프로그래밍을 위한 수단 중 하나인 QT Designer 를 사용해서 프로그래밍하는 방법을 설명할 것이다.
QT Designer 만으로 QT 프로그래밍을 할 수는 없다. 하지만, 사용하면 매우 편리하다는 것을 알게 될 것이다.
먼저 QT 개발환경이 구축되었다는 가정하에 설명하겠다. 구축에 관한 문서는 개발환경 구축하기 - 1.x86 기반의 qt 를 참고하기 바란다.
우리는 먼저 QT/X11 을 컴파일했고, QT/Embedded 를 컴파일했다. /opt/ 아래의 각각의 서브 디렉토리 bin 아래를 보면, 실행파일들의 구성이 거의 비슷하다는 것을 알 수 있다.
QT Designer 의 실행파일인 'designer' 또한 양쪽 모두에 있다. 또한 뒤에서 살펴볼 'uic' 역시 포함되어 있다.
만일 포함되어 있지 않다면, 따로 각각 컴파일해줘야 한다. 약간의 혼란이 있을 수 있기 때문에 각각의 공통점과 차이점을 설명해보겠다.
차이점 | 공통점 | |
QTE | QVFB 를 사용해서 프로그램을 실행 | 실행방법 동일 |
QTX | 일반 X11 기반의 QT 이기 때문에, 바로 실행가능 | 실행방법 동일 |
위에서 주의할 것은 바로 환경변수의 문제로 인해 제대로 컴파일이 안되는 문제이다. 실제로 QTE 에서 .h 파일과 .cpp 파일을 만들고 QTX 에서 qmake 로 .pro 파일과 Makefile 파일을 만들어서 컴파일한 결과, 링킹 과정에서 에러가 발생했다. 이 반대의 경우도 마찬가지이다.
파일이름과 경로가 같더라도, 엄연히 QTX 와 QTE 는 서로 다른 목적에서 만들어졌다. 위와 같은 문제가 발생하는 가장 주요한 원인은 환경변수($QTDIR)이다.
차후에라도 링킹 과정에서 문제가 있다면, 반드시 환경변수를 일치시킨 상태에서 컴파일해야 한다.
QT Designer
그전까지 모두 텍스트 기반의 프로그래밍 방식을 사용했었다. 버튼같은 위젯의 경우, 위치를 어림잡아서 지정하곤 했었다. 하지만, 이제는 QT Designer 로 좀더 세밀한 UI 디자인을 할 수 있다.
참고 이 문서에서는 QTX 를 기준으로 설명할 것이다. QTE 역시 실행방법은 동일하기 때문에 크게 걱정할 필요는 없다.
다음과 같이 실행한다.
#cd /opt/qtx-3.3.3/bin #designer &
인터페이스는 흡사 비주얼베이직과 비슷하다. 실제로 사용법 역시 비슷하다. 원하는 위젯을 선택해서 윈도우에 배치한다.
또한 속성창에서 각각의 위젯에 대한 설정 변경이 가능하다. 마지막으로 가장 중요한 기능이라고 볼 수 있는 시그널/슬롯 설정은 연결하고 싶은 위젯을 드래그해서 연결시키는 것으로 끝난다.
저장을 하면, 확장자가 .ui 로 끝나는 파일이 생성된다. 편집기로 열어보면, xml 태그로 이루어져 있다.
이 파일을 기준으로 .h 파일과 .cpp 파일을 생성해낼 것이다. 참으로 놀랍지 않은가?? 손수 일일이 코팅을 하지 않아도 된다니.. ^^;
방법은 아래와 같다.
#uic fat.ui > fat.h #uic -impl fat.h fat.ui > fat.cpp
생성된 파일을 열어보면, 정말로 소스 파일이 자동으로 만들어져 있다!! 하지만 아직 컴파일을 하기에는 이르다.
main() 함수가 빠져있기 때문이다. 그래서 main.cpp 라는 파일을 만들고,
#include <qapplication.h> #include "fat.h" int main(int argc, char **argv) { QApplication app(argc, argv); Fat * mw = new Fat; mw -> show(); app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); return app.exec(); }
위와 같이 입력한다.
#qmake -project #qmake -makefile #make
에러없이 컴파일 되었다면, 실행해보자!! QTX 이기 때문에, 바로 실행이 가능하다.
알아둘 사항
QTE 아래의 실행파일들은 모두 QVFB 를 통해서만 실행이 가능하다. QT Designer 또한 마찬가지이다. QVFB 를 이용해서 실행시 문제가 되는 것이 바로 해상도 문제이다. 이럴때는 QTX 아래의 QT Designer 를 사용한다. .ui 파일을 만드는 작업까지는 QTX 와 QTE 가 공통이기 때문에 문제가 발생하지 않는다.