码迷,mamicode.com
首页 > 其他好文 > 详细

QT evenFilter()与installEvenFilter()

时间:2018-11-26 00:03:07      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:bsp   有一个   event   sep   监控器   debug   strong   arc   ati   

1, eventFilter 函数中实现事件过滤器。请注意:该函数在 QObject 类中声明为一个虚函数,因此只能由 QObject 的子类继承使用。

2, installEventFilter函数,它负责在相应部件上安装事件过滤器,其声明为:

void QObject::installEventFilter(QObject *filterObj);

其中,filterObj参数表示实现事件过滤器的部件。请注意,如果我们在一个部件安装了事件过滤器,一般在其父控件上实现事件过滤器函数。

  我觉得evenFilter()就像是监控器,而installEventFilter()则是在各个地方安装监控器,最后凡是安装了监控器的对象都被监控,发生的事件由监控器进行处理。

Qt提供了5个级别来处理和过滤事件.


1. 我们可以重新实现特定的event handler.
    重新实现像mousePressEvent(), keyPressEvent()和paintEvent()这样的event Handler是目前处理event最普通的方式.
2. 我们可以重新实现QObject::event().
    通过重新实现event(),我们可以在事件到达特定的event handler之前对它们作出处理. 这个方法主要是用来覆写Tab键的缺省实现. 也可以用来处理不同发生的事件类型,对它们,就没有特定的event handler. 当重新实现event()的时候,我们必须调用基类的event()来处理我们不显式处理的情况.
3. 我们可以安装一个event filter到一个单独的QObject.
    一旦一个对象用installEventFilter注册了, 发到目标对象的所有事件都会先发到监测对象的eventFilter(). 如果同一object安装了多个event filter, filter会依次被激活, 从最近安装的回到第一个.
4. 我们可以在QApplication对象上安装event filter.
    一旦一个event filter被注册到qApp(唯一的QApplication对象), 程序里发到每个对象的每个事件在发到其他event filter之前,都要首先发到eventFilter(). 这个方法对debugging非常有用. 也可以用来处理发到disable的widget上的事件, QApplication通常会丢弃它们.
5. 我们可以子类QApplication并重新实现notify().
    Qt调用QApplication::notify()来发出事件. 在任何event filter得到之前, 重新实现这个函数是得到所有事件的唯一方法. event filter通常更有用, 因为可以有任意数目且同时存在的event filter, 但是只有一个notify()函数.

 

参考

https://www.cnblogs.com/smoozer/archive/2009/02/09/1386704.html

https://www.cnblogs.com/god-of-death/p/7815720.html

 

QT evenFilter()与installEvenFilter()

标签:bsp   有一个   event   sep   监控器   debug   strong   arc   ati   

原文地址:https://www.cnblogs.com/nanqiang/p/10017790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!