イベント フィルタがインストールされた QMainWindow があります。QDialog を開いて閉じた後、QMainWindow は KeyPress イベントではなく ShortcutOverride イベントのみを受け取るため、キーボードの矢印キーが反応しません。
ShortcutOverride イベントを処理するように QMainWindow のイベント フィルタを変更すると、私のプログラムでは各キー プレス イベントの前に 2 つのショートカット オーバーライド イベントがあるため、奇妙な動作が発生しました (なぜ??)。
これは機能しません - イベントは複数回処理されます:
bool eventFilter(QObject *, QEvent *event) {
if(type == QEvent::KeyPress || type == QEvent::ShortcutOverride) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
switch(keyEvent->key()) {
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_Left:
case Qt::Key_Right:
// Do something here
break;
default:
break;
}
return true;
}
return false;
}
なぜこうなった?これらの ShortcutOverride イベントはどこから来るのですか?
編集:
結局のところ、QDialog が開かれると QMainwindow はフォーカスを失い、QDialog が閉じられると元に戻りません。QMainwindow の eventFilter で setFocus() を使用しましたが、うまくいくようです。