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继承过来。

二、事件处理过程

QT事件

第一,当事件发生时,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函数。

相关文章:

  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-06-27
  • 2021-12-30
  • 2021-04-03
猜你喜欢
  • 2021-05-13
  • 2021-12-10
  • 2021-07-11
  • 2021-12-10
  • 2021-06-07
  • 2021-06-19
  • 2021-09-19
相关资源
相似解决方案