QApplication不处理关键事件?

时间:2012-07-20 05:09:23

标签: qt qt4.7 qdialog qevent qkeyevent

QApplication app(argc, 0);
MyDialog * pDlg = new MyDialog(0, Qt::WindowTitleHint | Qt::CustomizeWindowHint);
if (qApp) qApp->installEventFilter(pDlg);

在main()中,我只是为qApp安装了一个事件过滤器。然后在MyDialog.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);
}

我设置了一些断点。该行"返回false"可以到达,这意味着qApp已成功在MyDialog上安装了一个事件过滤器。但是线路返回真实'当我按键盘时从未到达。我记得QApplication将派遣所有活动。有人能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

使用keyPressEvent

void MyDialog::keyPressEvent(QKeyEvent *e)
{
// do something
}