Qt中的事件处理
来源:互联网 发布:电子印章生成器软件 编辑:程序博客网 时间:2024/06/06 02:08
图形界面应用程序的消息处理模型
操作系统发送的消息如何转为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); }
阅读全文
0 0
- qt中的事件处理
- Qt中的事件处理
- Qt中的事件处理
- Qt中的事件处理机制
- (二十八)Qt中的事件处理
- QT中的界面跳转,事件处理过程思考
- 第38课 - Qt 中的事件处理(上)
- QT 事件处理
- Qt事件处理机制
- QT事件处理
- Qt事件处理机制
- Qt事件处理机制
- qt 双击事件处理
- Qt事件处理
- qt事件处理
- Qt:事件处理
- QT 事件处理
- Qt 事件处理
- 跳过 SourceTree 注册
- 《机器学习实战》完整读书笔记
- XlistView 上拉加载下拉刷新
- 人工智能来得太快,印度程序员纷纷“中枪”下岗
- 前端学习(五)http知识回顾
- Qt中的事件处理
- 动态生成类的方法
- android.view.WindowLeaked 问题彻底解决【dialog导致窗口泄露】
- 20170722memo
- 设计模式-观察者模式(Java实现)
- 一个完美的鲁棒的数字打印程序
- HTML+CSS编写静态网站-43 如何修复bug
- 【Leetcode】【python】Maximum Depth of Binary Tree
- Oracle12C--重载包中的子程序(五十)