Qt专栏之事件本质(十四)

在《事件初识》介绍了常用的事件,虽说事件有些类似中断处理机制,那么事件的本质机理是什么?在程序中如何分发的呢?

一般来说,我们在新建一个Qt工程后,main()函数中创建一个QApplication对象,最后调用它的exec()函数,开始Qt的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件

2021-03-15_110714

那么当某个事件发生时,是如何跳转到对应的事件处理函数中呢?

事件

在exec()循环监听过程中,Qt将创建一个事件对象。创建完毕之后,首先该事件是否被过滤器筛选,如没有,Qt将这个事件对象传递给QObject的event()函数【事件分发器】。event()函数并不直接处理事件,而是按照事件对象的类型分派给指定的事件处理函数(event handler)进行处理。最终触发跳转到对应的事件处理函数

事件流程的自定义

熟悉了事件产生及触发的逻辑流程及机制,我们可以重写事件过滤器或事件分发器以实现程序多样性和定制化流程。例如对于事件的拦截就有两种自定义方法:

  • 事件过滤器:安装对应控件的事件过滤器installEventFilter()→重写eventFilter函数(其他事件可抛给父类eventFilter);
  • 事件分发器:重写event(QEvent *e)→通过e→type判断事件类型进行判断拦截自定义处理。

img

img
分享微信公众号『设计至纯』,查看更多原创内容,O(∩_∩)O一键三连🤳、分享😍、收藏、点赞、支持🐱‍🚀。 ^ o ^ 您的点赞、评论和关注,是小小编继续创作的不懈动力。 😀

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值