(1) Hello Qt
- 예제
1 #include <QApplication>
2 #include <QLabel>
3 int main(int argc, char *argv[])
4 {
5 QApplication app(argc, argv);
6 QLabel *label = new QLabel("Hello Qt!");
7 label->show();
8 return app.exec();
9 }
- Qt의 모든 클래스는 자신의 이름과 똑같은 이름으로 된 헤더파일 내에 정의되어 있다.
- 5번째 줄 : 응용 프로그램 차원의 자원을 관리하기 위해 QApplication 객체를 생성한다.
- QApplication은 GUI 응용 프로그램 제어 흐름과 주요 설정 사항을 관리하는 클래스로서, 메인 이벤트 루프를 갖고 있으며, 응용 프로그램의 초기화와 종료화 그리고 시스템 차원의 설정사항과 응용 프로그램 차원의 설정사항을 다룬다.
- Qt를 사용하는 GUI 응용 프로그램에는 하나의 QApplication 객체만이 존재할 수 있으며, 전역 포인터인 qApp 나 QCoreApplication::instance()를 통해 이 객체에 접근할 수 있다.(자세한 것은 Qt 어시스턴트 참조)
- 명령행으로부터 입력되는 인자 중에서 Qt가 자체적으로 인식하는 것이 있기 때문에, QApplication을 생성할 때는 생성자에 argc와 argv를 넘겨줘야 한다.
- 6번째 줄 : "Hello Qt"라는 문자열을 출력하는 QLabel 위젯을 생성하고 있다.
- Qt와 유닉스에서 통용되는 위젯(Widget)이란 용어는 유저 인터페이스 상에 자리잡은 각각의 비주얼한 요소를 일컫는 말이다. '윈도우 가젯'이란 말에서 유래된 이 용어는, 윈도우에서 사용되는 용어인 '컨트롤'이나 '컨테이너'와 그 의미하는 바가 동일한데, 이를 테면 버튼, 메뉴, 스크롤 바, 프레임 등이 바로 위젯인 것이다. 하지만 Qt는 어떠한 위젯이라도 윈도우가 될 수 있다는 특징이 있다.
- 7번째 줄 : 이 레이블이 화면에 보이게 만들고 있다. 모든 위젯은 항상 화면에 보이지 않는 상태로 생성되는데, 이러한 방침은 화면에 보이기 이전에 위젯에 필요한 모든 조치가 취해질 수 있게 하기 위한 것으로서, 이를 통해 불필요한 화면의 깜빡임을 막을 수 있게 된다.(화면 깜빡임의 다른 방법은 더블 버퍼링으로 5장에서 다룬다.)
- 8번 줄 : 응용 프로그램의 제어를 Qt에게 넘겨주고 있다. 이렇게 되면 프로그램은 마우스 클릭이나 키보드 입력과 같은 사용자의 액션을 기다리는 일종의 대기모드인 이벤트 루프에 진입하게 된다. 사용자의 액션은 이벤트('메시지'라고도 함)를 발생시키게 되는데, 프로그램은 보통 이러한 이벤트에 대해 몇 가지 함수를 실행함으로써 반응하게 된다. 예를 들어, 사용자가 어떤 위젯을 클릭하면 '마우스 버튼의 누름'과 '마우스 버튼의 뗌'을 의미하는 이벤트가 생성된다.
- main() 함수의 끝부분에서는 좀 더 간략함을 위해 QLabel 객체에 대한 delete 호출을 생략하고 있다. 프로그램이 종료되면 운영체제는 그 프로그램이 사용한 모든 메모리를 회수하기 때문에, 이 정도 크기의 작은 프로그램에서 발생하는 메모리 누수는 아무런 해가 되지 않는다.
- 프로그램을 실행시키려면 먼저 컴퓨터에 Qt 4.3.2이상의 Qt 4가 설치되어 있어야 함.
- 그리고 Qt의 bin 디렉토리가 PATH 환경변수에 설정되어 있어야 함.(부록 A 참조, 윈도우는 Qt 설치시 자동으로 등록됨.)
- 1 # vi hello.cpp
2 # qmake -project
3 # qmake hello.pro
4 # make
5 # ./hello - 1 : chapter01의 hello 예제 파일 소스임.
- 2 : 플랫폼에 독립적인 프로젝트 파일(hello.pro)이 생성됨.
- 3 : 이전 단계에서 생성된 플랫폼 독립적인 프로젝트 파일로부터 특정 플랫폼을 위한 makefile이 생성됨.
- 4 : 프로그램이 만들어 진다.
- 5 : 만들어진 프로그램을 실행
- ### 윈도우 비쥬얼 스튜디오 프로젝트 파일 만드는 법 ###
-
# qmake -tp vc hello.pro
(2) Signal / Slot
- 시그널은 함수와 연결될 수 있어서, 시그널이 발생하면 그와 연결된 함수가 자동으로 실행되는데, 이처럼 시그널의 발생에 의해 자동으로 호출되는 함수를 슬롯이라고 한다.
- SIGNAL()과 SLOT()은 시그널과 슬롯을 연결하는 데 사용하는 매크로이다.
- ex) QObject::connect( button, SIGNAL(clicked()), &app, SLOT(quit()));
(3) Widget
-
QWidget은 어떤 응용프로그램의 메인 윈도우가 될 수 있다.
(4) Reference Document
end
댓글 없음:
댓글 쓰기