2
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);
}

いくつかのブレークポイントを設定しました。「return false」という行に到達できます。これは、qApp が MyDialog にイベント フィルターを正常にインストールしたことを意味します。しかし、キーボードを押しても「return true」という行に到達しませんでした。QApplication がすべてのイベントをディスパッチすることを覚えています。なぜこれが起こったのか誰か教えてもらえますか?

4

1 に答える 1

1

keyPressEventを使用します。

void MyDialog::keyPressEvent(QKeyEvent *e)
{
// do something
}
于 2012-07-20T06:13:54.940 に答える