逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
引自: http://qtsoftware.blogspot.com/
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 这个哥们的翻译文章。
posted on 2009-05-15 12:28 逛奔的蜗牛 阅读(746) 评论(0)  编辑 收藏 引用 所属分类: Qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理