当前位置:   article > 正文

QT事件_qt所有事件

qt所有事件

http://www.mamicode.com/info-detail-1110145.html这篇文章介绍中,了解了QT关于事件处理的一些知识,仔细研究一下,我觉着原文有点问题,现整理如下:

一、首先介绍QT中的几个类

1、基类QObject

这个类中有两个虚函数

virtual bool event(QEvent *);

virtual bool eventFilter(QObject * /* watched */, QEvent * /* event*/);

2、QApplication。

这个类是从QObject继承过来,所以也有上述两个函数,并且也定义了一个自己的虚函数

virtual bool notify(QObject*receiver, QEvent *e);

注:这个函数实际上是在QCoreApplication这个类中定义的,QApplicationQCoreApplication继承过来,QCoreApplicationQObject继承过来。

二、事件处理过程


第一,当事件发生时,QApplication定义的对象a会收到该事件的发生。调用a的notify函数,这个函数根据recerver将事件e发送的程序中的具体的某一个控件(对象)。

第二,如果对对象a安装了事件过滤器(a.installEventFilter(&a);),则会执行eventFilter函数来过滤事件。注意:这里一旦过滤掉某一个事件,对整个应用程序有效,也就是所有的控件都不会收到该事件。

第三,调用某一个控件(由notify 函数中的receiver确定哪一个控件)的event函数来处理。这里仅仅将事件分类,比如该事件是按键事件或者鼠标事件等等;

第四,如果该控件安装了事件过滤器(obj_x.installEventFilter(&obj_x);),则会执行该控件的eventFilter函数来过滤事件。注意:这里的过滤和第二步的过滤的效果不一样,这里的过滤只对该控件有效,如果该控件中有子控件,则对子控件也有效,比如该控件是一个Qwidget的对象,则该Widget中的所有的Qlabel、QpushButton等控件都不会收到本次事件。

第五,上述确定好某一个事件后,会调用某一个控件的具体的事件处理函数,比如按键按压的keyPressEvent函数。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/949593
推荐阅读
相关标签
  

闽ICP备14008679号