QT evenFilter()与installEvenFilter()

Posted nanqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT evenFilter()与installEvenFilter()相关的知识,希望对你有一定的参考价值。

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()的主要内容,如果未能解决你的问题,请参考以下文章

sh 列出android adb shell中所有已安装的软件包(来源:http://www.digitalinternals.com/mobile/android-adb-list-installe

hp,Qlogic,Brocade光纖卡查看方式

哪个 Qt Creator 与 Qt4 兼容?

QT开发(十三)——QT信号与槽机制

QT版本下载与解释

QT中的信号与事件,多线程