最終更新:2013-07-14 (日) 16:28:20 (3954d)
Qt/イベント処理
シグナルとスロット
Qt/シグナル - メッセージを送る
- 何かが発生したことを他のオブジェクトに通知するための C++ の関数
例:QButton?
- void pressed ()
- void released ()
- void clicked ()
- void toggled ( bool on )
- void stateChanged ( int state )
Qt/スロット - メッセージを受け取る
- シグナルに反応して実行される C++ の関数
接続
Qt Designerでの実装
- コントロールを右クリック->「スロットへ移動」でシグナル一覧が表示され、選択するとスロットが作成される
QObject::connect?()を使って接続
- 定義
bool QObject::connect (送信オブジェクト, SIGNAL(シグナル名()), 受信オブジェクト, SLOT(スロット名()), Qt::ConnectionType type = Qt::AutoConnection )
- 例
connect(button, SIGNAL(clicked()), this, SLOT(close()));
SIGNAL?/SLOT?マクロ
- メソッド名を文字列(const char*)に変換するマクロ
シグナルとスロットの接続について
- QObject::connect?() において、シグナルは SIGNAL? マクロで、スロットは SLOT? マクロで囲む必要があります。
- 引数については型のみを記述し、const、& や変数名は記述しません。
- スロットの引数の型と順番は、シグナルの引数の型と順番に正しく対応している必要があります。スロットの引数がシグナルの引数より少ない場合は正しく動作し、余分なシグナルの引数は単純に無視されます。
- シグナルとスロットの引数の型が合わなかった場合には接続は失敗します。QObject::connect() は false を返し、実行時に警告が出力されます。
- これにより、シグナルが発生しスロットが実行される際の引数の型の安全性が確保されます。
- 複数の異なるシグナルを一つのスロットに接続することや、一つのシグナルを複数の異なるスロットに接続することが可能です。また、シグナルをシグナルに接続することも可能です。
Qt/イベント?
Qt/イベントハンドラ
- ウィジェットのイベントハンドラの仮想関数を実装
マウスイベント
- mousePressEvent?(QMouseEvent?* event)
- mouseReleaseEvent?(QMouseEvent?* event)
- mouseDoubleClickEvent?(QMouseEvent?* event)
- mouseMoveEvent?(QMouseEvent?* event)