イベントハンドラ、connect、SIGNAL、SLOT
GUIアプリというのは、マウスやキーボードなどの外部からのイベントに対応して処理を書く、イベントドリブン方式でプログラムを書きます。古くはWin32のメッセージから、今時ならActionScriptのイベントリスナーなど、徐々に記述の仕方は洗練されています。
Qtでどうイベントハンドラを記述するかと言えば、
connect( ui->action_FileNew, SIGNAL(triggered()), this, SLOT(onFileNew()) );
という形で、
connect( イベント発生元, SIGNAL(発生イベント), イベント受け取り先, SLOT(受け取りメソッド) );
という独特な形で記します。なんか気持ち悪いですねw まぁ、慣れてしまえば素晴らしいです! たとえばこの場合、action_FileNew というメニューで、triggered() というイベントが発生したら、thisオブジェクトの、onFileNew() メソッドが呼ばれるようになります。
SIGNALに関しては、QtCreatorなら、
connect( ui->action_FileNew, SIGNAL(
とタイプした所で、実装されているSIGNAL一覧が候補に上がります。すごい!
SLOTに関しては、自分で実装する事になりますが、
private slots: void onFileNew();
という形で、クラスのメソッドとして宣言する場合、SLOTである事を明示してやる必要があります。何でこうする必要があるのか分からないですが、深い事情があるのでしょう。従うしかありません:)
「SIGNALやSLOTに引数を渡したい時はどうなるの?」という疑問が出てくると思いますが、そういう時は、
connect( comboBox, SIGNAL(activated(int)), this, SLOT(onComboSelect(int)) );
のような形で記述します。こんなの見たこと無い!w