QMainWindow安装事件过滤器

时间:2015-03-30 08:47:51

标签: qt events event-handling qmainwindow

我正在尝试学习如何在QMainWindow上安装事件过滤器,以便在QMainWindow中弹出任何QDialog,事件过滤器可以处理对话框并将对话框置于屏幕中心。

makVrv::DtDeMainWindow& mw = makVrv::DtDeMainWindowProvider::instance(de).igMainWindow();
makVrv::DtQtDeMainWindow *mainW = dynamic_cast<makVrv::DtQtDeMainWindow*>(&mw);

if(mainW)
{
    …
    mainW->installEventFilter(mainW);
}

bool eventFilter(QObject *obj, QEvent *e)
{
    // how do I get the pointer to the dialog so I can try to center the widget?
}

任何人都可以建议我如何安装事件过滤器以检测QDialog,以便我可以将对话框置于屏幕中心?

感谢。

1 个答案:

答案 0 :(得分:3)

首先:mainW->installEventFilter(mainW);您正在自我安装事件过滤器。如果您真的想要处理来自mainW的事件,则需要覆盖QObject::event方法。

第二:有很多方法,如何在类之间共享指针。它是OOP的基础。在您的情况下,您需要声明一个指向对话框的指针作为您的类的成员并进行检查:

bool eventFilter(QObject *obj, QEvent *e)
{
    if ( obj == dlg ) // Where `dlg` is a pointer to your dialog
    {
        // Do some stuff
    }

    //...
}