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函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值