本チュートリアルは、画像処理をGUIで行えるアプリケーションの作成を目標とする。
毎回、新しいプログラムを作成するのではなく、
前回のプログラムに新しい機能を追加して行く形で進める。
各章は次のような構成になっている。
次のプログラムのソースコードと、プログラムで使うサンプル画像の 圧縮ファイル(zip)をダウンロードする。
上の2つのファイルはzip形式で圧縮されている。各OSでの 解凍方法を示す。
zip形式のファイルの解凍を行う。 ここでは、unzipを使用した例を示す。
[yourname@localhost qt]# unzip sample.zip
適当な解凍ソフトをインストールし、フォルダ付きで解凍する。
解凍後のフォルダの構成は次の通りである。
ここでは、動作確認のために実際にコードを書き、
実行する。
上のようにコマンドボタンを
一つ持ったアプリケーションを作成する。
以下に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オブジェクトが必要で、 また、どのオブジェクトよりも先に宣言される必要がある。
QPushButtonクラスは、上の様なボタンを定義する。
これらのボタンはコマンドボタンと呼ばれ、ほとんどのGUIの
中心となるオブジェクトであろう。
この記述は定石として覚えて置けばよい。
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を宣言し、GUIアプリケーションの初期化を行っている。
クラス変数の宣言は、大文字のQで始まり、大文字と小文字を区別する。
引数にargc, argvを渡すことは定石として覚えて置けばよい。
QPushButtonクラスの変数helloを宣言する。
一つ目の引数は、コマンドボタンに表示される文字列で、2番めの変数で
親オブジェクトを指定できる。
このアプリケーションは、ボタンのみでボタンに親は必要ないので、
0を渡した。
コマンドボタンをメインウィンドウに追加する。
設置しただけでは表示されないので、ここでボタンを表示する。
ここでmain関数の制御をQtに渡す。
Qtのアプリケーションは終了するとexec()を返す。
exec()ではQtはユーザーイベントとシステムイベントの受け取りと処理を行い、
それらを適切なウィジェットに渡す。
複数のファイルが依存して構成されているプログラムをコンパイルするとき、
いちいち、全ファイル名を手入力していたのでは手間がかかる。
この手間を軽減するために作られたのが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のマニュアルはほぼ日本語化されている)