I have a QMainWindow with an event filter installed. After I open and close QDialog, the keyboard arrow keys do not respond, since QMainWindow only receives ShortcutOverride events instead of KeyPress events.
When I changed the QMainWindow event filter to handle ShortcutOverride events, I got a weird behavior, since in my program every keystroke event is preceded by two shortcut override events (why?).
This does not work - events are processed several times:
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:
break;
default:
break;
}
return true;
}
return false;
}
Why is this happening? Where do ShortcutOverride events come from?
Edit:
, QMainwindow , QDialog , QDialog .
setFocus() eventFilter QMainwindow , , .