Why does the QEvent :: ShortcutOverride event occur?

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:
      // Do something here
      break;
    default:
      break;
    }

    return true;
  }

  return false;
}

Why is this happening? Where do ShortcutOverride events come from?

Edit:

, QMainwindow , QDialog , QDialog . setFocus() eventFilter QMainwindow , , .

+3
2

- , , , - . , , , .

ShortcutOverride, , . , . , , . , " ". : https://wiki.qt.io/ShortcutOverride

+2

All Articles