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
}
//...
}
我正在尝试学习如何在 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
}
//...
}