gpt4 book ai didi

c++ - 为什么会发生 QEvent::ShortcutOverride 事件?

转载 作者:太空狗 更新时间:2023-10-29 21:48:34 32 4
gpt4 key购买 nike

我有一个安装了事件过滤器的 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() ,它似乎可以解决问题。

最佳答案

失去焦点正是在打开对话框后没有收到任何键盘事件的原因。您建议的解决方案可能是解决此问题的最佳方法。

至于 ShortcutOverride 事件,它们会在每次按键时出现,因为任何键或键组合都可以注册为快捷方式。如果需要,此事件为您提供取消快捷方式处理的选项。当引擎还不知道按下的键是否将用作快捷方式时,必须尽早处理它。因此,“以防万一”为所有按键生成事件。您可以在这里阅读更多内容:https://wiki.qt.io/ShortcutOverride

关于c++ - 为什么会发生 QEvent::ShortcutOverride 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429908/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com