.Qtのイベント処理
メッセージ処理モデルA.のGUIアプリケーション
のQtイベント変換B.Qtシステム・プラットフォームによって生成されたメッセージ
1.Qtイベントは、オブジェクトQEventある
2.Qt内部又は外部発生プログラム動作のためのイベントを記述する
任意3. QObjectをオブジェクトは、イベント処理する能力を有する
C.GUIアプリケーションイベント処理
1.Qtイベントが直ちにQWidgetのに割り当てられた発生した後のオブジェクト
のイベントの2.QWidget(QEvent )イベント処理
イベントのタイプに基づいて3.event()呼び出しを異なるイベントハンドラは、
予め定義されたイベントハンドラで4 Qtの信号伝送
5.関数呼び出し信号関連する溝
シーン解析
のQPushButtonイベント処理及び分析は
1マウスイベントを受信した
前記コールイベント(QEvent)メンバ関数
3.コールmouseReleaseEvent(QMouseEvent *)メンバ関数
4ボーククリック()メンバ関数
5.トリガ信号は、(()をクリック)
コードサンプルを-カスタムイベント
QMyPushButton.cpp
#include "QMyPushButton.h"
#include <QMouseEvent>
QMyPushButton::QMyPushButton(QWidget* parent, QButtonListener* listener) : QPushButton(parent)
{
m_listener = listener;
}
void QMyPushButton::mouseReleaseEvent(QMouseEvent *e)
{
if( m_listener != NULL )
{
m_listener(this, e);
e->accept();
setDown(false);
}
else
{
QPushButton::mouseReleaseEvent(e);
}
}
QMyPushButton.h
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H
#include <QPushButton>
typedef void (QButtonListener)(QObject*, QMouseEvent*);
class QMyPushButton : public QPushButton
{
Q_OBJECT
protected:
QButtonListener* m_listener;
void mouseReleaseEvent(QMouseEvent *e);
public:
explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);
signals:
public slots:
};
#endif // QMYPUSHBUTTON_H
Widget.cpp
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H
#include <QPushButton>
typedef void (QButtonListener)(QObject*, QMouseEvent*);
class QMyPushButton : public QPushButton
{
Q_OBJECT
protected:
QButtonListener* m_listener;
void mouseReleaseEvent(QMouseEvent *e);
public:
explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);
signals:
public slots:
};
#endif // QMYPUSHBUTTON_H
Widget.h
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H
#include <QPushButton>
typedef void (QButtonListener)(QObject*, QMouseEvent*);
class QMyPushButton : public QPushButton
{
Q_OBJECT
protected:
QButtonListener* m_listener;
void mouseReleaseEvent(QMouseEvent *e);
public:
explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);
signals:
public slots:
};
#endif // QMYPUSHBUTTON_H
ボタンは、図2に示すように放出される業績及び印刷結果
異なるイベント及びD.信号
の特定の対象によって処理イベント1.
2.オブジェクト固有の信号が活性によって生成された
イベントハンドラが書換プログラム挙動変化引き起こす可能性が3.
4。溝の機能変化しない挙動をプログラムに対応する信号があるかどうか
、一般的に5を、特定のイベントハンドラで生成された信号
E.イベント転送処理
QEventにおけるキー部材関数は
受信機によって無視-無視1.voidは()現在のイベント、イベントは、親コンポーネントに送信されてもよい
)(受け入れる2.void -現在のイベント受信者の所望の処理
)isAccepted 3.boolを( -現在のイベントが処理されているか否かを判断する
。図に示すコード生成演算結果を
F.Qtでイベント・フィルタ
イベント・フィルタ1は、他のコンポーネントを受け取ることができるイベントモニタ
2は、任意のイベントフィルタとして使用することができるオブジェクトQObjectを
イベント・フィルタ・オブジェクトはeventFilter()関数の書き換えが必要3.
に)installEventFilterスルー成分(インストールイベント・フィルタ
1.イベントが組立前にイベントフィルタを受信する
コンポーネントオブジェクトにイベントを転送するかどうかを決定する。2.イベント・フィルタ
の基本 -コード
要約
1.Qt異なるイベントと信号の
2イベントがターゲットQObjectをすることによって処理される
3 QObjectの信号はオブジェクトによってトリガされた
イベントハンドラは、プログラムの動作をオーバーライドすることができる4.なる
5.トリガ信号がプログラムの動作に影響を及ぼしません
6.アプリケーションイベントハンドリングは本当に実用的な技術開発は非常に一般的です