【问题标题】:Is there a way to uninstall eventfilter in qt?有没有办法在qt中卸载eventfilter?
【发布时间】:2014-09-06 20:39:01
【问题描述】:

我只需要一段时间的事件过滤器,以后有办法卸载它吗?

【问题讨论】:

    标签: c++ qt events qtcore qobject


    【解决方案1】:

    请阅读event system works in Qt here.这对于基本理解至关重要,尤其是这一段:

    QObject::installEventFilter() 函数通过设置事件过滤器来实现这一点,使指定的过滤器对象在其 QObject::eventFilter() 函数中接收目标对象的事件。事件过滤器在目标对象之前处理事件,允许它根据需要检查和丢弃事件。可以使用 QObject::removeEventFilter() 函数删除现有的事件过滤器。

    读完之后,你可以看到installEventFilter 的对应部分,毫不奇怪,它被称为removeEventFilterHere is the Qt 5 documentation给它:

    void QObject::removeEventFilter(QObject * obj)

    从此对象中移除一个事件过滤器对象 obj。如果尚未安装此类事件过滤器,则忽略该请求。

    当这个对象被销毁时,这个对象的所有事件过滤器都会被自动删除。

    删除事件过滤器始终是安全的,即使在事件过滤器激活期间(即从 eventFilter() 函数)。

    【讨论】:

    • 自动移除但未销毁?
    【解决方案2】:

    是的,有。这是一个名为QObject::removeEventFilter 的函数。

    【讨论】:

      【解决方案3】:

      来自 Qt 文档:

      void QObject::removeEventFilter (QObject * obj)

      从此对象中移除一个事件过滤器对象 obj。如果尚未安装此类事件过滤器,则忽略该请求。

      当这个对象被销毁时,这个对象的所有事件过滤器都会被自动删除。

      删除事件过滤器始终是安全的,即使在事件过滤器激活期间(即从 eventFilter() 函数)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 2010-11-28
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多