我正在尝试学习如何在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,以便我可以将对话框置于屏幕中心?
感谢。
答案 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
}
//...
}