Qt中的事件处理
2017-07-22 07:46
190 查看
图形界面应用程序的消息处理模型
操作系统发送的消息如何转为Qt中的信号?
Qt平台将系统产生的消息转换为Qt事件
Qt事件是一个QEvent的对象
Qt事件用于描述程序内部或者外部发生的动作
任意的QObject对象都具备事件处理能力
GUI应用程序的事件处理方式
Qt事件产生后立即被分到QWidget对象
QWidget中的event(QEvent*)进行事件处理
event()根据事件类型调用不同的事件处理函数
在事件处理函数中发送Qt中预定义的信号
调用信号相关联的槽函数
QPushButton事件处理分析
接收鼠标事件
调用event(QEvent*)成员函数
调用mouseReleaseEvent(QMouseEvent*)成员函数
调用click()成员函数
触发信号SIGNAL(clicked())
事件(QEvent)和信号(SIGNAL)不同
事件由具体对象进行处理
信号由具体对象主动产生
改写事件处理函数可能导致程序行为发生改变
信号是否存在对应的槽函数不会改变程序行为
一般而言,信号在具体的时间处理函数中产生
QEvent中的关键成员函数
void ignore()
接收者忽略当前事件,事件可能传递给父组件
void accept()
接收者期望处理当前事件
bool isAccept()
判断当前事件是否被处理
Qt中的事件过滤器
事件过滤器可以对其他组件接收到的事件进行监控
任意的QObject对象都可以作为事件过滤器使用
事件过滤器对象需要重写eventfilter()函数
组件通过installEventFilter()函数安装事件过滤器
事件过滤器在组件之前接收到事件
事件过滤器能够决定是否将事件转发到组件对象
事件过滤器的典型实现
// 返回true表示事件已经处理,无需传递给obj
// 返回false则正常传递到obj
操作系统发送的消息如何转为Qt中的信号?
Qt平台将系统产生的消息转换为Qt事件
Qt事件是一个QEvent的对象
Qt事件用于描述程序内部或者外部发生的动作
任意的QObject对象都具备事件处理能力
GUI应用程序的事件处理方式
Qt事件产生后立即被分到QWidget对象
QWidget中的event(QEvent*)进行事件处理
event()根据事件类型调用不同的事件处理函数
在事件处理函数中发送Qt中预定义的信号
调用信号相关联的槽函数
QPushButton事件处理分析
接收鼠标事件
调用event(QEvent*)成员函数
调用mouseReleaseEvent(QMouseEvent*)成员函数
调用click()成员函数
触发信号SIGNAL(clicked())
事件(QEvent)和信号(SIGNAL)不同
事件由具体对象进行处理
信号由具体对象主动产生
改写事件处理函数可能导致程序行为发生改变
信号是否存在对应的槽函数不会改变程序行为
一般而言,信号在具体的时间处理函数中产生
QEvent中的关键成员函数
void ignore()
接收者忽略当前事件,事件可能传递给父组件
void accept()
接收者期望处理当前事件
bool isAccept()
判断当前事件是否被处理
Qt中的事件过滤器
事件过滤器可以对其他组件接收到的事件进行监控
任意的QObject对象都可以作为事件过滤器使用
事件过滤器对象需要重写eventfilter()函数
组件通过installEventFilter()函数安装事件过滤器
事件过滤器在组件之前接收到事件
事件过滤器能够决定是否将事件转发到组件对象
事件过滤器的典型实现
// 返回true表示事件已经处理,无需传递给obj
// 返回false则正常传递到obj
bool Widget::eventFilter(QObject* obj,QEvent* e) { if(/* 根据 obj 判断对象 */) { if(/* 根据e->type判断事件 */) { /* 事件处理逻辑 */ } } /* 调用父类中的同名函数 */ return QWidget::eventFilter(obj,e); }
相关文章推荐
- Qt中的事件处理
- Qt 事件处理的五个层次
- qt中的事件处理
- Qt GUI 通过鼠标事件剖析整个事件处理流程(基于Qt4.5.2源码windows平台)
- Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例
- Qt事件处理(五)
- QT基础(二)----鼠标、键盘事件处理机制、信息拦截机制
- QT——事件处理机制
- Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例
- Qt事件处理的五个层次、Qt自定义事件的实现
- qt之键盘、鼠标事件处理
- QT用信号和处理机制为事件添加处理动作(点击按钮显示helloworld)
- Qt事件处理
- 用事件队列解决GUI的操作顺序问题(Qt中处理方法)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt事件处理小应用之KeyGame
- Qt的事件处理和定时器解析(实例解析)
- 第38课 - Qt 中的事件处理(上)
- Qt5事件处理机制:“函数样式转换”:位于“.”运算符右边时非法/不允许使用此类型名