最初は画面にHelloQt!と表示するプログラムを作るこ
とにします。まずは何も考えず次のソースコードを入力し、実行できるかどうかのテストをしてみてください。
1
#include <QApplication>
2 #include <QLabel> 3 4 int main(int argc, char** argv) 5 { 6 QApplication app(argc, argv); 7 QLabel* label = new QLabel("Hello Qt!"); 8 label->show(); 9 return app.exec(); 10 } |
コンパイルを行うにはLinuxの場合ターミナルを実行しソースコードが置いてあるフォルダまで移動してください。その後、
qmake -project
をタイプしてください。次に
qmake
をタイプし、最後に
make
とします。これでフォルダに実行ファイルが作成され たはずです。 WindowsでVisualStudioを使っている場合は、コマンドプロンプトを実行しソースコードが置いてあるフォルダに移動したあと、
qmake -project -t vcapp -o hello.pro
をタイプし、次に
qmake
を実行します。そうすると、hello.vcprojという VisualStudioのプロジェクトファイルが作成されます。このプロジェクトを実行し、コンパイルを行ってください。 プログラムを実行するとWindows環境の場合、図 1.1のように表示されると思います。
図 1.1: Windowsで実行 したHello |
では一行ずつ解説していきます。
1,2行目の部分は、 QApplicationとQLabelのクラスの定義をインクルードしています。 Qtを使っているGUIアプリケーションには必ず一つのQApplicationのオブジェクトが無ければなりません。また、すべて のQtクラスはヘッダーファイルとクラスが同じ名前に設定されています。
6行目はQApplication オブジェクトを作成しています。QApplicationはアプリケーションに関するリソースを管理するものであり、コンストラクタにはargcと argvを渡さなければなりません。このため、Qtで作成したプログラムでもコマンドライン引数を使うことが出来ます。
7行目では HelloQt!と表示するラベルを作成しています。 そして8行目でラベルを表示しています。
そして9行目でコントロールをQt アプリケーションに渡します。コントロールを渡した先ではイベントループが起こっています。
これでプログラムは完成です。プロ グラムをコンパイルして実行してみてください。うまくコンパイルができたでしょうか?
ここで、QLabelはnewした のにdeleteしていないのでメモリリークが起こりますが、プログラムが終了すればオペレーティングシステムが勝手に処理してくれるので、細かいことは 気にしないでください。
1.1節
のプログラムでQLabelを使用しました。ここでQLabelの面白い使い方を見てみましょう。前節の
QLabel*label=newQLabel("Hello Qt!");
の部分を次のコードに置き換えてコンパイル、実行してみてください。
QLabel*label=newQLabel("<i>Hello Qt!</i>");
図 1.2の ように、斜体文字となりました。
図 1.2: Windowsで実行したHello2 |
という書き方はHTMLで主に使 用されています。このようにHTMLスタイルの書き方をQLabelではサポートしています。他にも
QLabel*label=newQLabel("Hello Qt!"); とすると、図 1.3と なります。
図 1.3: Linuxで実行したTest2 |
HTMLについ てはここでは説明しません。興味のある方はインターネットで調べてみてください。
とほほのWWW 入門 (http://www.tohoho-web.com/www.htm) なんかがお勧めです。
前節ではラベルを作ったので、今度はボタンを作ってみましょう。次のようなコードを書いたとします。
1 #include <QApplication> 2 #include <QPushButton> 3 4 int main(int argc, char** argv) 5 { 6 QApplication app(argc, argv); 7 QPushButton* button = new QPushButton("Hello Qt!"); 8 button->resize(200,50); 9 button->move(100,50); 10 button->show(); 11 return app.exec(); 12 } |
図 1.4: QPushButton の例 (on Windows)
|
前節でボタン (QPushButton) を作りましたが、もしかしたら文字フォントを変えてみたいと思ったかもしれません。(そんなことは無い?)
Qt ではフォントを変えるのも簡単です。前節のプログラムに次のコードを書き加えるだけです。
#include <QFont>
button->setFont( QFont("Times", 15, QFont::Bold) ); |
QFont を使う場合は、 QFont をインクルードしなければなりません。
QFont のコンストラクタは、
QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false );
と定義されています(他にもありますが省略します)。
まずは、setFont関数ですが、この関数にQFontクラスのオブジェクトを渡してあげることでフォントの変更ができます。
図1.5は button->setFont(QFont("Times",15,QFont::Bold,true)); を追加した場合の実行例です。
図 1.5: QFont の例 (on Windows)
|
もしかしたらもうお気づきの方もいるかもしれません。今までボタンやラベルのキャプションには英語しか使ってきませ んでした。なぜ日本語を使わなかったのかというと、実は日本語の扱いは厄介なものだからです。次のようなコードを実行したとしましょう。これは1.1節 のコードの7行目を変え ただけです。
1
#include <QApplication>
2 #include <QLabel> 3 4 int main(int argc, char** argv) 5 { 6 QApplication app(argc, argv); 7 QLabel* label = new QLabel("こ んにちは Qt"); 8 label->show(); 9 return app.exec(); 10 } |
この実行結果は図1.6と なります。
図 1.6: 日本語の表示 (on Linux)
|
なんと文字化けしてしまっています。 Linux と Windows どちらも使ったことのある方な ら、文字コードの問題は厄介なものだと知っていると思います。
Windows の場合、使われている文字コードは大体が Shift-JIS です。 Unix 系の場合は EUC-JP や UTF-8 などでしょうか。この文字コードの違いにより文字化けが起こってしまいます。
この問題を回避するためには、Qtに自分が使っている文字コードを教えてあげる必要が
あります。その方法は、次のようなコードになります。
1
#include <QApplication>
2 #include <QLabel> 3 #include <QTextCodec> 4 #include <QString> 5 6 int main(int argc, char** argv) 7 { 8 QApplication app(argc, argv); 9 QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 10 QLabel* label = new QLabel(QObject::tr("こんにちは Qt")); 11 label->show(); 12 return app.exec(); 13 } |
実行結果は、図1.7と なります。
|
重要なのは、 9 行目と 10 行目です。
9 行目の
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
という部分で文字コードを指定しています。
setCodecForTr関数の引数には、QTextCodec型の値を渡します。
[1] Jasmin Blanchette & Mark
Summerfield, C++ GUI Programming with Qt4.
[2] Trolltech, Qt Assistant
Tutorial and Examples Qt Tutorial
[3] Trolltech, Qt Assistant All
Classes