Qt中的事件处理
图形界面应用程序的消息处理模型
问题:操作系统发送的消息如何转变为Qt信号的?
Qt事件
Qt平台将系统产生的消息转换为Qt事件
-
Qt事件是一个QEvent的对象
-
Qt事件用于描述程序内部或外部发生的动作
-
任意的QObject对象都具备事件处理的能力
GUI应用程序的事件处理方式
- Qt事件产生后立即被分发到QWidget对象
- QWidget中的event(QEvent*) 进行事件处理
- event() 根据事件类型调用不同的事件处理函数
- 在事件处理函数中发送Qt中预定义的信号
- 调用信号关联的槽函数
情景分析:按钮点击
- OS接收到鼠标事件
- Qt接收到鼠标事件后调用event(QEvent*) 成员函数
- 调用mouseReleseEvent(QMouseEvent*) 成员函数
- 调用click() 成员函数
- 触发信号SIGNAL(clicked())
示例代码:自定义事件处理函数
//QMyPushButton.h
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:
};
//QMyPushButton.cpp
QMyPushButton::QMyPushButton(QWidget* parent, QButtonListener* listener) : QPushButton(parent)
{
m_listener = listener;
}
void QMyPushButton::mouseReleaseEvent(QMouseEvent