QMainWindow 安装事件过滤器

QMainWindow Install Event Filter

我正在尝试学习如何在 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 以便我可以在屏幕上居中显示对话框吗?

谢谢。

首先:mainW->installEventFilter(mainW);您正在为自己安装事件过滤器。如果你真的想处理进入你的 mainW 的事件,你需要重写 QObject::event 方法。

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

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

    //...
}