QT事件过滤和事件分发

145 篇文章 666 订阅 ¥9.90 ¥99.00
本文详细介绍了QT中的事件处理机制,包括QEvent和QApplication的角色,主事件循环如何分发事件,以及事件如何从全局事件过滤器到目标对象的事件过滤器,再到对象的事件分发器进行处理。通过示例代码展示了如何重写事件分发器和安装事件过滤器来拦截和处理事件。
摘要由CSDN通过智能技术生成

1、首先需要知道QT中事件相关的两个主要的类:QEvent和QApplication:

(1)QEvent是事件对象类,它下面包含了很多的子类,一个子类对象就代表了一个具体的事件。比如用户交互时会产生一个QMouseEvent事件对象,系统自动产生的QTimerEvent定时器事件对象等。

(2)QApplication类。一般的Qt程序,main函数中都有一个QCoreApplication/QGuiApplication/QApplication,并在末尾调用 exec。其里边维护着一个QEventLoop,我们称之为“QT的主事件循环”。

这样当用户单击鼠标时,操作系统会产生一个QMouseEvent事件对象,并加入到了事件队列中。再由QT中的主事件循环进行处理:获取事件、分发事件到相应的接收者。比如我们用鼠标单击一个QLabel文本框,鼠标单击事件最终会被分发到QLabel对象。

2、主事件循环的分发操作(如何分发到对应的接受者):

QCoreApplication中的分发操作主要由sendEvent、postEvent和sendPostedEvents三个函数完成,三个函数实际都调用notify进行事件分发,而notify最终调用notify_helper进行处理;

bool QCoreApplicationPrivate::notify_hel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值