在《事件初识》介绍了常用的事件,虽说事件有些类似中断处理机制,那么事件的本质机理是什么?在程序中如何分发的呢?
一般来说,我们在新建一个Qt工程后,main()函数中创建一个QApplication对象,最后调用它的exec()函数,开始Qt的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。
那么当某个事件发生时,是如何跳转到对应的事件处理函数中呢?
在exec()循环监听过程中,Qt将创建一个事件对象。创建完毕之后,首先该事件是否被过滤器筛选,如没有,Qt将这个事件对象传递给QObject的event()函数【事件分发器】。event()函数并不直接处理事件,而是按照事件对象的类型分派给指定的事件处理函数(event handler)进行处理。最终触发跳转到对应的事件处理函数。
事件流程的自定义
熟悉了事件产生及触发的逻辑流程及机制,我们可以重写事件过滤器或事件分发器以实现程序多样性和定制化流程。例如对于事件的拦截就有两种自定义方法:
- 事件过滤器:安装对应控件的事件过滤器installEventFilter()→重写eventFilter函数(其他事件可抛给父类eventFilter);
- 事件分发器:重写event(QEvent *e)→通过e→type判断事件类型进行判断拦截自定义处理。
分享微信公众号『设计至纯』,查看更多原创内容,O(∩_∩)O一键三连、分享、收藏、点赞、支持。 ^ o ^ **您的点赞、评论和关注
转载:https://blog.csdn.net/caq_jw/article/details/114902461
查看评论