1. QT中的事件传递
- 事件传递的过程
-
QEvent 中的关键成员函数
void ignore(); // 接收者忽略当前事件,事件可能传递给父组件 void accept(); // 接收者期望处理当前事件 bool isAccepted(); // 判断当前事件是否被处理
1. QT中的事件过滤器
-
QT 中的事件过滤器
- 事件过滤器可以对其它组件接收到的事件进行监控
- 任意的 QObject 对象都可以作为事件过滤器使用
- 事件过滤器对象需要重写 eventFilter() 函数
-
组件通过 installEventFilter() 函数安装事件过滤器
-
事件过滤器在组件之前接收到事件
-
事件过滤器能够决定是否将事件转发到组件对象
-
-
事件过滤器的使用方式
// 返回 true 表示事件已经处理过,无需传递给 ogj // 返回 false 则正常传递到 ogj bool Widget::eventFilter(QObject* obj,QEvent* e) { if( /* 根据 obj 判断对象 */) { if( /* 根据 e->type() 判断事件 */ ) { /* 事件处理逻辑 */ } } /* 调用父类同名函数 */ return QWidget::eventFilter(obj,e); }
3. 总结
- QT 应用程序由严格的事件处理顺序
- QT 事件在处理后可能传递给父组件对象
- 可以通过 installEventFilter() 函数安装事件过滤器
- 事件过滤器可以对其它组件接收到的事件进行监控
- 事件过滤器能够决定是否将事件转发到组件对象