我有一个安装了事件过滤器的 QMainWindow。在我打开和关闭 QDialog 后,键盘箭头键没有响应,因为 QMainWindow 只接收 ShortcutOverride 事件而不是 KeyPress 事件。
当我更改 QMainWindow 的事件过滤器以处理 ShortcutOverride 事件时,我得到了一个奇怪的行为,因为在我的程序中,每个按键事件之前都有两个快捷方式覆盖事件(为什么??)。
这不起作用 - 事件被多次处理:
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() ,它似乎可以解决问题。