Qt for Beginners/ko
Qt 소개
Qt(큐티가 아닌 큐트라고 발음합니다.)는 CLI 어플리케이션을 만드는데에도 유용하지만, 주로 그래픽 툴킷으로 사용되는 크로스플랫폼 프레임워크 입니다. Qt는 주요 3개의 운영체제뿐만 아니라, 심비안, 노키아 벨, 미고, 하마탄, 미고 또는 BB10 같은 모바일 운영체제, 그리고 임베디드 디바이스에서도 작동합니다. iOS와 안드로이드 포팅 역시 개발 중에 있습니다.
Qt는 다음과 같은 인상적인 모듈들을 갖고있습니다.
- QtCore는 컨테이너, 쓰레드 관리, 이벤트 관리 등을 제공하는 기본 라이브러리 입니다.
- QtGui와 QtWidgets는 어플리케이션 디자인을 위한 많은 양의 그래픽 컴포넌트를 제공하는 데스크탑용 GUI 툴킷입니다.
- QtNetwork는 네트워크 연결을 위한 일련의 유용한 클래스들을 제공합니다.
- QtWebkit은 Qt 어플리케이션에서 웹페이지와 웹 어플리케이션을 사용할 수 있도록 해주는 웹킷 엔진입니다.
- QtSQL은 개별 드라이버로 연장 가능한 SQL RDBM 추상계층을 포함합니다. ODBC, SQLITE, MySQL 그리고 PostgreSQL을 특별 지원합니다.
- QtXML은 간단한 XML 분석과 DOM을 지원합니다.
- QtXmlPatterns는 XSLT, XPath, XQuery 그리고 Schema 인증을 지원합니다.
Qt SDK 설치
Qt 어플리케이션 제작을 시작하기 위해서는, Qt 라이브러리와, 필요에 따라, IDE를 갖고있어야 합니다. 이것은 소스로 빌드하거나, 더 나은 방법으로는, 다운로드 페이지에서 다운로드 할 수 있습니다. 이 SDK는 심비안과 노키아 N9 같은 크로스컴파일 같은 많은 기능을 포함하고 있습니다. 'Custom install'을 선택하면 이 기능들을 설치하지 않을 수 있습니다. 아래의 패키지를 설치하는 것을 명심하십시오.
Qt Creator의 기능
우리의 첫번째 GUI 앱을 만들기 전에, Qt Creator에 대해 알아봅시다.
Qt Creator는 그저 C++ 개발환경입니다. 하지만 Qt Creator는 Qt 어플리케이션을 코딩하는데 최적화되어있습니다. 이것은 문서 탐색기와, 윈도우 개발을 손쉽게 해주는 잘 만들어진 유저 인터페이스, '디자이너'를 제공합니다. 이것은 또한 가장 빠른 IDE 중 하나입니다.
- QMake Documentation
- Qt Documentation
- Qt 4.8.1 (Destkop) (Qt 4.8.1가 가장 최신버전이라는 가정하에)
- Qt Creator
아래의 패키지들도 역시 유용할 수 있습니다.
- Qt Examples
- Qt Linguist
여러분이 Symbian / Maemo / Meego 또는 옛날 버전 Qt에서 개발하고 싶다면 다른 패키지를 선택할 수 있습니다.
NB: 리눅스에서는, 여러분의 배포판이 제공하는 패키지를 사용하는 것이 낫습니다. Qt Creator는 거의 모든 배포판에서 사용가능합니다. 그리고 설치시에는 라이브러리, 컴파일러, 그리고 개발 헤더와 같은 모든 dependancies들을 설치해야합니다.
우리는 첫번째 윈도우를 개발할 준비가 됐습니다. 그것은 늘 그렇듯이, Hello World 입니다.
첫번째 윈도우
첫번째 프로젝트를 만드는 것으로 시작합니다. File > New file or project > Other Projects > Empty Qt Project를 통해 빈 프로젝트를 만듭니다.
프로젝트 폴더와 이름, 그리고 Qt 버전을 선택하면 다음과 같은 페이지를 보게 될 것입니다.
이것은 프로젝트 파일입니다(확장자 .pro). Qt는 'makefiles' 파일을 생성하기 위해 이 프로젝트 파일을 분석하는 커맨드라인 툴을 사용합니다. 이 툴을 qmake라고 부릅니다. 하지만 이 단계에서 Qt Creator가 우리의 일을 대신해주므로, qmake를 너무 신경쓰지 않도록 합니다.
프로젝트 파일 안에는, 아래의 최소한의 코드는 반드시 적혀있어야 합니다.
TEMPLATE = app
TARGET = name_of_the_app
QT = core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
- TEMPLATE은 빌드할 타입을 저장합니다. 어플리케이션, 라이브러리, 또는 간단한 하위디렉토리가 될 수도 있습니다.
- TARGET은 어플리케이션 또는 라이브러리의 이름입니다.
- QT는 해당 프로젝트에서 어떤 라이브러리(Qt 모듈)을 사용할지 나타냅니다. 우리의 첫번째 앱은 작은 GUI이기 때문에, QtCore와 QtGui가 필요합니다.
이제 우리의 어플리케이션에 시작지점을 추가합시다. File > New file or project > C++ > C++ Source file을 통해 파일을 추가합니다.
파일 이름을 'main'으로 만들면 끝입니다. 프로젝트 파일을 확인해보면, 새로운 줄이 Qt Creator에 의해 자동으로 추가된 것을 확인할 수 있습니다.
TEMPLATE = app
TARGET = name_of_the_app
QT = core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
SOURCES += main.cpp
헤더와 소스파일들을 수동적으로 추가할 수 있습니다.
HEADERS += first_file.h second_file.h
SOURCES += first_file.cpp second_file.cpp
다음과 같은 방법을 써도 됩니다.
HEADERS += first_file.h second_file.h
SOURCES += first_file.cpp second_file.cpp
Qt Creator 마법사를 사용하면, 자동으로 할 수 있습니다.
아래는 Qt 어플리케이션의 최소한의 코드입니다.
#include <QApplication>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
return app.exec();
}
QApplication은 대단히 중요한 클래스입니다. 이것은 입력 인수들 뿐만 아니라 많은 다른 것들을 관리합니다. 하지만 가장 중요한 것은, 이벤트 루프 입니다.
app.exec()가 작동하면 이벤트 루프가 실행됩니다.
이 어플리케이션을 컴파일해봅시다. 왼쪽 아래의 녹색 화살표를 클릭하면, Qt Creator가 컴파일, 실행시켜줄 것입니다. 어떤 일이 벌어졌나요? 어플리케이션이 실행되었지만, 반응하지 않는 것 같습니다. 이건 흔한 일입니다. 이벤트 루프는 마우스 클릭 같은 이벤트가 발생하길 기다리고 있습니다. 하지만 우리는 처리되어야할 이벤트를 전혀 넣지 않았습니다. 그래서 이것은 영원히 작동할 것입니다.
무언가 보이는 것을 추가해 봅시다.
#include <QApplication>
#include <QPushButton>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QPushButton button ("Hello world !");
button.show();
return app.exec();
}
컴파일 하세요. 그러면... 이것이 우리가 만든 첫번째 윈도우입니다!
Qt 프로그램이 컴파일되는 방식
Qt Creator는 우리를 대신해 빌드 시스템을 불러오는 역할을 합니다. 하지만, Qt 프로그램이 어떻게 컴파일 되는지 아는 것도 재미있을 것입니다.
작은 프로그램들의 경우, 직접 컴파일 하고, 오브젝트 파일을 만들고, 링크하는 것이 쉽습니다. 하지만 커다란 프로젝트들의 경우, 커맨드라인은 순식간에 쓰기 힘들어집니다. 여러분이 리눅스에 익숙하다면, 모든 프로그램들은 어떤 커맨드를 실행할지 적어놓은 makefile을 통해 컴파일 된다는 것을 알 것입니다. 하지만 어떤 프로젝트들은, makefile을 쓰는 것 조차 지루할 수 있습니다.
qmake는 Qt의 빌드 시스템입니다. 이것은 여러분을 위해 makefiles를 만들어 줍니다. 이것은 간단한 문법을 통해, Qt 프로그램을 컴파일할 때 필요한 makefile을 생성합니다. 하지만 이게 유일한 목적은 아닙니다. Qt는 C++의 기능들을 확장하기 위해 메타 오브젝트를 사용합니다. 그리고 qmake는 makefile이 메타 오브젝트 추출 단계를 포함하게 만드는 역할을 합니다. 다른 챕터에서 이 부분을 다룰 것입니다.
따라서, Qt 어플리케이션들은 3 단계로 컴파일 됩니다.
- 컴파일할 프로젝트에 대한 정보가 담겨있는.pro 파일을 작성합니다.
- qmake가 makefile을 생성합니다.
- make가 프로그램을 빌드합니다.(윈도우즈의 경우, nmake 또는 jom를 사용)