Qt는 GUI 프로그램 개발을 위한 크로스 플렛폼 위젯 툴킷으로 최근 TrollTech가
Nokia에 인수되면서 차후
Symbian에 주요 프레임워크로 사용될 예정입니다. 또한 데스크탑에서 작성한 코드를 그대로 디바이스에 사용할 수 있기 때문에 디버깅이 쉽다는 장점이 있습니다.
1. 개발 환경 구축하기
※ 비스타 사용자는 설치 중간에 나오는 환경 변수 설정을 유의하셔야 합니다.
순서대로 설치를 한 뒤 Qt Creator를 실행하여 Tools-Options-Qt4-Qt Versions에 있는 S60_5th_Edition_SDK_vX.X (Qt x.x.x)를 선택하여 CSL, Carbide 디렉토리를 설정합니다.
개발 환경 구축이 성공적으로 되었는지 확인하기 위해 간단한
Hello World 프로그램을 작성해봅시다.
2. 윈도우 환경에서 디버그
윈도우 환경이기 때문에 S60 SDK를 이용하지 않고 기본 Qt를 사용할 것입니다.
기본적인 Hello World의 코드는 아래와 같습니다.
[code]
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt World!");
label->show();
return app.exec();
}
[/code]
위 코드는 QLabel을 생성하여 Hello Qt World!를 띄우는 간단한 코드입니다. 실행을 하면 아래와 같은 프로그램이 실행됩니다.
영문 출력은 가뿐히 통과했습니다. 이제 한글 출력을 해보도록 합시다.
#include <QApplication>
#include <QString>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel(QString::fromLocal8Bit("안녕 큐트 월드!"));
label->show();
return app.exec();
}
[/code]
QString을 include하여 formLocal8Bit로 처리를 하니 한글이 정상적으로 출력되었습니다.
이번엔 Widget(위젯)을 만들어 Label을 Qt의 장점이라고 생각되는 Layout(레이아웃)에 추가하여 보기 좋은 Hello World를 만들어 보겠습니다.
레이아웃은 위젯의 위치나 크기를 지정하지 않아도 필요에 따라 적절한 위치와 크기를 할당해줍니다. 아래 코드는 layout이라는 레이아웃을 생성하여 label을 위젯으로 추가한 뒤 window에 레이아웃을 할당하여 출력하는 코드입니다.
[code]
#include <QApplication>
#include <QHBoxLayout>
#include <QString>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
QHBoxLayout *layout = new QHBoxLayout;
QLabel *label = new QLabel(QString::fromLocal8Bit("안녕 신비한 큐트 세상!"));
layout->addWidget(label);
window->setWindowTitle(QString::fromLocal8Bit("안녕 심비안 세상!"));
window->setLayout(layout);
window->show();
return app.exec();
}
[/code]
실행을 하니 보기 좋은 Hello World가 실행되었습니다.
Layout의 종류는 위에서 사용된 일반적으로 위젯을 왼쪽에서 오른쪽으로 수평 배열하는 QHBoxLayout, 위에서 아래로 수직 배열하는 QVBoxLayout, 바둑판 형식으로 배열하는 QGridLayout이 있습니다.
3. S60 5th 환경에서 디버그
Qt는 위에서 언급했듯 크로스 플렛폼 툴킷답게 S60 5th SDK와 약간의 설정만 해주면 Qt Creator에서 바로 디바이스를 통한 디버깅이 가능합니다.
Projects-General의 Qt Version을 S60_5th_Editon_SDK_v.X.X로 설정합니다.
디바이스에서 디버깅을 할 것이기 때문에 Run Settings의 Add를 눌러 Symbian Device를 선택한뒤 Make <Project> on Symbian Device active를 눌러 디바이스 디버깅 설정을 활성화해줍니다.
이제 디바이스에 Qt 라이브러리와 TRK를 설치합니다.
기본적으로 Qt 라이브러리 설치 파일은 C:\Qt\VERSION\qt_installer.sis에 있으며 디바이스에 올려 설치하거나 PC Suite를 이용해 설치하시면 됩니다.
TRK는 디바이스와 Qt Creator를 연결하여 바로 디버깅을 할 수 있도록 도와주는 역할을 합니다. TRK를 설치한 뒤 USB 또는 Bluetooth로 PC와 연결합시다.
이제 디바이스에서 디버깅을 할 준비가 되었으니 위에서 작성한 보기 좋은 Hello World를 바로 디바이스를 통해 디버깅을 해봅시다.
아니 이게 무슨 소리야! 한글이 깨지고 말았습니다. 이는 QString::fromLocal8Bit를 사용한 미봉책 때문에 나타난 폐해입니다.
이를 해결하기 위해선 formLocal8Bit 대신 QTextCodec을 사용하여 문자열 코덱을 지정하면 됩니다.
[code]
#include <QApplication>
#include <QTextCodec>
#include <QObject>
#include <QHBoxLayout>
#include <QString>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("eucKR"));
QWidget *window = new QWidget;
window->setWindowTitle(QObject::tr(("안녕 심비안 세상!")));
QHBoxLayout *layout = new QHBoxLayout;
QLabel *label = new QLabel(QObject::tr("안녕 신비한 큐트 세상!"));
layout->addWidget(label);
window->setLayout(layout);
window->show();
return app.exec();
}
[/code]
우리가 출력하고자 하는 문자열은 한글이기 때문에 EUC-KR을 지정해주었습니다.
QObject::tr으로 한글 문자열을 묶어주고 디바이스를 통해 디버깅을 해봅시다.
Eureka! 한글이 정상적으로 출력되어 S60 5th 환경에서 신비한 큐트 세상을 만나게 되었습니다.
정상적인 출력을 하니 더 이상의 설명이 필요한가! 시작하기는 이것으로 마칩니다.
사족 보기 >
Qt의 Label은 HTML 포맷을 지원합니다. 그렇기 때문에 빛 좋은 Hello World도 만들 수 있습니다!
[code]
QLabel *label2 = new QLabel(QObject::tr("<font color=yellow>just written by Enchant</font>"));
layout->addWidget(label2);
[/code]
위와 같은 코드를 추가한 뒤 실행한 결과는 아래와 같습니다.