您的位置:首页 > 编程语言 > Qt开发

Qt中事件处理的顺序

2017-05-30 15:29 363 查看
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文链接:Qt中事件处理的顺序

文章内容主要来自于C++ GUI Programming with Qt4 这本书的第七章,做了点翻译和整理。

1.事件首先由Qt的ServerApplication去接收来自于外部或内部的一些行为,鼠标点击,键盘输入,时钟事件等,分析并决定送往对应 的对象去处理(内部管理机制,如有机会另文分析),最后会调用bool QCoreApplication::notify ( QObject * receiver, QEvent * event ) [virtual]去处理,当然这个是虚函数,你可以在子类去重新实现它 。

2.在notify(…)中,在发给对应的接收者前,会先把消息送给QApplication。所以如果想在你界面的Widget前先处理那些事 件,那么你可以给QApplication对象installEventFilter,然后在对应的eventFilter()里先把这些事件都给过一 遍,该和谐的先和谐掉。

3.如果QApplication没有处理那些事件,然后就是交给事件接收对象了。在这个对象接收前,也可以为这对象加一个事件过滤器,同样是 installEventFilter,不过它的调用者是事件接收者(也就是前面那个reveiver参数),而不是 QApplication/QCoreApplication.

4.经过了前面两级过滤后,如果事件还没被处理(前面函数的返回值为false),那么就会进入接收者的event()函数,你可以里面根据事件的不同类型尽情处理。

5.默认event()函数根据事件类型会调用不同的事件处理函数,类似mouseEvent(),keyEvent()去分别处理他们。

以上事件处理流程,由复杂到简单。至于每一步我们写代码的时候,都会怎么去用它,可以参考http://www.cnblogs.com/smoozer/archive/2009/02/09/1386704.html 这个哥们的翻译文章。
http://blog.csdn.net/cuteqt/article/details/5920064
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: