QT 를 설치했으니 이제 간단한 프로그램을 작성해 보겠습니다. 역시나 그 유명한 "Hello" 를 출력해 보겠습니다.

▶ 프로그램 작성 순서

  1. qtx 과 qte 개발환경을 설정합니다.
  2. 소스파일을 생성합니다.
  3. progen -o ***.pro 로 프로젝트 파일을 생성합니다.
  4. tmake -o Makefile ***.pro 로 메이크 파일을 생성합니다.
  5. make 를 실행합니다.

프로그램 소스, main.cpp

#include <qapplication.h>
#include <qlabel.h>

int main(int argc, char **argv)
{
  QApplication app( argc, argv);
  QLabel *lb= new QLabel( "<font size=5 color=blue>Hello!! <b>JWJW</b></font>", 0);
  app.setMainWidget(lb);
  lb->show();

  return app.exec();
}

qtx 에서 메이크 파일 생성 및 실행

]# source /qt/qtx.env
]# progen -o hello.pro main.cpp
]# tmake -0 Makefile hello.pro
]# make
]# ./hello


top

qte 에서 메이크 파일 생성 및 실행

]# source /qt/qte.env
]# progen -o hello.pro main.cpp

progen 에서 만든 프로젝트 파일을 그대로 Makefile 을 만들면 안된다. 그렇게 되면 생전 듣도 보도 못한 이상한 에러가 발생합니다.

undefined reference to 'QWizard::staticMetaObject()'

이유는 tmake 와 qtopia 버전의 차이라는데, 버전을 여러개 바꾸어서 해 보았지만, 역시 같은 에러가 발생했습니다.
마음 편하게 프로젝트 파일에서 CONFIG 항목을 아래와 같이 바꾸면 됩니다.

CONFIG = qt warn_on release -> CONFIG = qtopia warn_on release

이제 Makefile 을 만듭니다.

]# tmake -0 Makefile hello.pro
]# make

qte, 즉 QT/Embedded 프로그램은 X11 에서 실행할 수 없습니다. 임베디드보드 이뮬레이션이 필요한데, 이것이 바로 qtx/bin 에 있는 qvfb 입니다.
이를 위해 qte.env 에는 qtx/bin 을 PATH 에 걸어 두었습니다.

프로그램을 실행하기 전에 qvfb 를 먼저 실행합니다.

]# qvfb -width 640 -height 340 -depth 16 -nocursor &

-depth 는 칼라 해상도를, -nocursor 은 qvfb 의 커서를 없애는 것으로 X11 커서와 중복이 되어 보기가 산만합니다. 실행하면서 아예 없애고 실행하고 있습니다.

]# ./hello -qws


top

-qws 는 실행할 때, 이뮬레이션 서버를 찾아 실행하라는 옵션으로 미리 실행한 qvfb 에 실행하라는 뜻입니다.

 

태그: *QT *그래픽