QT QApplication notify的问题

我新建了一个类MApplication,该类继承了QApplication。在MApplication中我重写了notify函数,在函数中我将试图将某些事件打印出来,具体如下图所示:

img


。现在我发现一个现象,我的主窗口的名称叫做“MUiMainView”,每次有一个鼠标或者键盘事件发生时,该事件都会先发送到一个名为“MUiMainViewWindow”(我的主窗口名称加上“Window”)的对象上,然后发送到我的主窗口“MUiMainView”的最上层窗口上,具体如下图:

img


。我不明白“MUiMainViewWindow”具体是什么?为什么会发送给这个对象?是QT的机制还是我设计的问题?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :Qt之重写 QCoreApplication::notify 过滤消息
  • 除此之外, 这篇博客: Qt事件循环详解(一)中的 QApplication的notify 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    可以这么说,每一个事件执行前,都要经过QApplication::notify,所以,我们可以重写notify来对事件做特殊处理。

    bool QApplication::notify(QObject *receiver, QEvent *event)
    {
       ...
       switch (e->type()) {
        ...
        case QEvent::Wheel: // User input and window activation makes tooltips sleep
        case QEvent::ActivationChange:
        case QEvent::KeyPress:
        case QEvent::KeyRelease:
        case QEvent::FocusOut:
        case QEvent::FocusIn:
        case QEvent::MouseButtonPress:
        case QEvent::MouseButtonRelease:
        case QEvent::MouseButtonDblClick:
        ...
        res = d->notify_helper(receiver, e);
        ...
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^