Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QMainWindow安装事件筛选器_Qt_Events_Event Handling_Qmainwindow - Fatal编程技术网

Qt QMainWindow安装事件筛选器

Qt QMainWindow安装事件筛选器,qt,events,event-handling,qmainwindow,Qt,Events,Event Handling,Qmainwindow,我正在尝试学习如何在QMainWindow上安装事件过滤器,以便在QMainWindow中弹出的任何QDialog中,事件过滤器都可以处理该对话框并将该对话框置于屏幕中央 makVrv::DtDeMainWindow& mw = makVrv::DtDeMainWindowProvider::instance(de).igMainWindow(); makVrv::DtQtDeMainWindow *mainW = dynamic_cast<makVrv::DtQtDeMainWi

我正在尝试学习如何在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?
}
makVrv::DtDeMainWindow&mw=makVrv::DtDeMainWindowProvider::instance(de).igMainWindow();
makVrv::DtQtDeMainWindow*mainW=动态投影(&mw);
如果(缅因州)
{
…
mainW->installEventFilter(mainW);
}
布尔事件过滤器(QObject*obj、QEvent*e)
{
//如何获取指向对话框的指针,以便尝试将小部件居中?
}
有人能告诉我如何安装事件过滤器来检测QDialog,这样我就可以在屏幕上居中显示对话框了吗


谢谢。

首先:
mainW->installEventFilter(mainW)您正在self上安装事件筛选器。如果您确实想处理mainW中出现的事件,则需要重写
QObject::event
方法

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

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

    //...
}