PAGER : トップ /このチュートリアルについて

本チュートリアルの見方

本チュートリアルは、画像処理をGUIで行えるアプリケーションの作成を目標とする。
毎回、新しいプログラムを作成するのではなく、 前回のプログラムに新しい機能を追加して行く形で進める。

各章は次のような構成になっている。

  1. この章での目的
  2. ソースファイル(変更点は強調表示する)。
  3. 変更点における重要な記述の説明
  4. 実行結果

サンプルのダウンロード

次のプログラムのソースコードと、プログラムで使うサンプル画像の 圧縮ファイル(zip)をダウンロードする。

解凍方法

上の2つのファイルはzip形式で圧縮されている。各OSでの 解凍方法を示す。

Linux

zip形式のファイルの解凍を行う。 ここでは、unzipを使用した例を示す。

[yourname@localhost qt]# unzip sample.zip

Windows

適当な解凍ソフトをインストールし、フォルダ付きで解凍する。

プログラムのソースファイルの構成

解凍後のフォルダの構成は次の通りである。

hello_qt
このページで作成する動作確認のために作成したソースコード
1
メインウィンドウの作成のソースコード
2
メニューバーの追加のソースコード
3
クラス定義(メインウィンドウの作成) のソースコード
4
クラス定義(メニューバーの追加) のソースコード
5
情報ダイアログを呼ぶのソースコード
6
画像の読み込み/保存のソースコード
7
画像処理のソースコード
8
ダイアログによる入力 のソースコード

Hello,Qt

helloQt
ここでは、動作確認のために実際にコードを書き、 実行する。
上のようにコマンドボタンを 一つ持ったアプリケーションを作成する。

コーディングからコンパイル、実行まで

以下にLinuxでの実行方法を示す。
Windowsでの場合は多少異なるので、 Windowsの場合を 参照してください。

#include <qapplication.h> #include <qpushbutton.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); QPushButton hello( "Hello world!", 0 ); a.setMainWidget( &hello ); hello.show(); return a.exec(); }

テキストエディタを開き、上のコードを入力してください。
適当な場所に、ファイルタイプを cpp で保存します。

コードの解説

必要なヘッダファイル

#include <qapplication.h> #include <qpushbutton.h>

Qtのライブラリはすべて"q"で始まり、 すべて小文字で記述する。
ここではQApplicationクラスQPushButtonクラスを加えた。

QApplicationクラスは、GUIアプリケーションのコントロールと 主要の設定を行うためのクラスである。Qtを使ったアプリケーションには 必ず一つのQApplicationオブジェクトが必要で、 また、どのオブジェクトよりも先に宣言される必要がある。

pushbutton
QPushButtonクラスは、上の様なボタンを定義する。 これらのボタンはコマンドボタンと呼ばれ、ほとんどのGUIの 中心となるオブジェクトであろう。

int main( int argc, char **argv )

この記述は定石として覚えて置けばよい。
main関数はプログラムの最初に実行される関数である。
argc, argvは、プログラムの実行時に渡すことの出来る引数である。 int型のargcは2番目で渡される文字列の個数です。argvはchar型配列 (文字列)へのポインタのアドレスである。
例えば、foo.exeというプログラムを実行するとき、

foo.exe aaa bbb ccc

のように実行すると、argcには4が(プログラム名も代入される)、 argv[0]にはfoo.exe、argv[1]にはaaaが…そしてargv[4]には"\0"(null文字)が代入される。

QApplication a( argc, argv );

QApplicationクラスの変数aを宣言し、GUIアプリケーションの初期化を行っている。
クラス変数の宣言は、大文字のQで始まり、大文字と小文字を区別する
引数にargc, argvを渡すことは定石として覚えて置けばよい。

QPushButton hello( "Hello world!", 0 );

QPushButtonクラスの変数helloを宣言する。
一つ目の引数は、コマンドボタンに表示される文字列で、2番めの変数で 親オブジェクトを指定できる。 このアプリケーションは、ボタンのみでボタンに親は必要ないので、 0を渡した。

a.setMainWidget( &hello );

コマンドボタンをメインウィンドウに追加する。

hello.show();

設置しただけでは表示されないので、ここでボタンを表示する。

return a.exec();

ここでmain関数の制御をQtに渡す。
Qtのアプリケーションは終了するとexec()を返す。
exec()ではQtはユーザーイベントとシステムイベントの受け取りと処理を行い、 それらを適切なウィジェットに渡す。

コンパイル、実行

makeとqmake

複数のファイルが依存して構成されているプログラムをコンパイルするとき、 いちいち、全ファイル名を手入力していたのでは手間がかかる。
この手間を軽減するために作られたのがmakeで、 依存関係が記述された“Makefile”という名称のファイルを参照し コンパイルすることにより、手間を軽減している。

また、qmakeは本来、自分で記述しなければならないMakefileを 作成するツールである。
qmakeは、現在のフォルダ以下のソースコードのファイルを調べ、 プロジェクトファイル(〜.pro)を作成する。そして、それを元に、 Makefileを作成することができる。
最初にプロジェクトファイルを作成する理由は、Qtの重要な機能である シグナルやスロットを記述したソースコードは、そのままでは コンパイルできないため、Meta Object Compiler(moc)というツールを 用いて、コンパイルできる形にする必要があるからである。 mocは、作成されたMakefileから自動的に呼ばれるので、使い方を意識する必要はない。

プログラムに関係ないソースコード(cppなど)があると、 プロジェクトファイルに組み込まれてしまうので 余計なソースコードのファイルを置いてはいけない。

コンパイル例

ターミナルでサンプルのhello_qtフォルダに移動し、次の様にコンパイルする。

[yourname@localhost hello_qt]qmake -project -o helloqt.pro [yourname@localhost hello_qt]qmake [yourname@localhost hello_qt]make

1行目はプロジェクトファイルを作成している。
qmake -project だけでもいいのだが、アプリケーション名として 使われるので、helloqt.proの部分は自分で名付けることをおすすめする (ただし、.pro形式にすること)。
2行目で、作成されたhelloqt.proを元に、Makefileを作成している。
3行目で、Makefileを元にプログラムをコンパイルし、実行ファイルhelloqtを作成している。

コードがただしく書かれていたならば、次に、

[yourname@localhost qt]./helloqt

の様に入力すれば、プログラムが実行される。


以上でコンパイル、実行方法は終わりである。 あとは、Qt付属のマニュアルの チュートリアルを学習すれば基本をマスター出来るであろう。
また、KDE日本ユーザー会がマニュアルの日本語化を すすめている。(バージョン3のマニュアルものは現在日本語化の途中であるが、 バージョン2のマニュアルはほぼ日本語化されている)

PAGER : トップ /このチュートリアルについて