QApplication app(argc, 0);
MyDialog * pDlg = new MyDialog(0, Qt::WindowTitleHint | Qt::CustomizeWindowHint);
if (qApp) qApp->installEventFilter(pDlg);
在main((中,我只是为qApp安装了一个事件过滤器。然后在我的对话框中.cpp:
bool MyDialog::eventFilter(QObject * watched, QEvent * event)
{
if (watched == qApp)
{
if (event->type() == QEvent::KeyPress)
{
// do something
return true;
}
return false;
}
return QDialog::eventFilter(watched, event);
}
我设置了一些断点。 可以到达"return false"行,这意味着qApp已成功在MyDialog上安装事件过滤器。但是当我按下键盘时,从未达到"返回true"行。我记得QApplication将调度所有事件。谁能告诉我为什么会这样?
使用 keyPressEvent。
void MyDialog::keyPressEvent(QKeyEvent *e)
{
// do something
}