[Interest] About event filter on QApplication

程梁 devbean at outlook.com
Sun Nov 3 16:21:09 CET 2013


Hi, there! I found a problem when I test some apps porting from Qt4 to Qt5.

The code is about event filter on QApplication. Code as following:

class EventFilter : public QObject
{
public:
    EventFilter(QObject *watched, QObject *parent = 0) :
        QObject(parent),
        m_watched(watched)
    {
    }


    bool eventFilter(QObject *watched, QEvent *event)
    {        if (watched == m_watched) {
            if (event->type() == QEvent::MouseButtonPress) {
                qDebug() << "QApplication::eventFilter";
            }
        }
        return true;
    }


private:
    QObject *m_watched;
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label;
    label.resize(300, 160);
    app.installEventFilter(new EventFilter(&label, &label));
    label.show();
    return app.exec();
}

As you could see, I installed a global event filter on QApplication. Note that I have returned true in the filter which means all events should stop processing. In Qt4, the output ("QApplication::eventFilter") will still there but with Qt5 nothing outputs. This might because watched and m_watched is not the same (QWidgetWindow). But when I changed to return false as default code, the output is there again. Maybe in Qt5 the return value also changes watched objects? I cannot find any documents about this. Could you help me? Thank you!

Cheng Liang
Nanjing, China
http://www.devbean.net 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20131103/b007ed4f/attachment.html>


More information about the Interest mailing list