QML 键盘快捷键会干扰 Key OnPressed 事件
QML Keyboard Shortcuts are interfering with Key OnPressed Events
我的 QML 程序有问题。在顶级 main.qml 文件中,我有一些键盘快捷键,如下所示:
Shortcut {
sequence: "Up"
onActivated: {
// yadda yadda
}
}
在另一个文件中,我有几个这样的 Keys.onPressed 调用:
Keys.onPressed: {
if (event.key == Qt.Key_Up) {
// yadda yadda
}
}
显然,快捷方式干扰了 OnPressed 调用。当我注释掉快捷方式时,OnPressed 的工作正常。但是当它们都处于活动状态时,快捷方式似乎会拦截键盘按下并阻止 OnPressed 激活。
我知道对于鼠标事件,Qt 有 "accepted" 变量。如果您希望事件继续向下传播到堆栈,您只需在 OnActivated 函数中设置 "accepted = false" 即可完成此操作。但是,我在快捷方式 API 中没有看到任何等效的 "accepted" 变量。有没有其他方法可以确保事件正确传播?
为了像快捷方式一样,Shortcut
必须比活动焦点项中的键处理程序具有更高的优先级。否则它与普通的密钥处理程序没有什么不同。但是,有时需要像您一样覆盖快捷方式。
在 Qt 5.8 及更早版本中,您可以 disable 一个 Shortcut
以防止它在某些条件下处理快捷事件。例如:
Shortcut {
enabled: !someItem.activeFocus
}
在Qt 5.9中,为此引入了更好的机制。具有键处理程序的活动焦点项现在可以通过使用 Keys.shortcutOverride
接受快捷方式覆盖事件来覆盖快捷方式。例如:
Item {
focus: true
Keys.onShortcutOverride: {
if (event.key == Qt.Key_Up)
event.accepted = true
}
Keys.onUpPressed: ...
}
我的 QML 程序有问题。在顶级 main.qml 文件中,我有一些键盘快捷键,如下所示:
Shortcut {
sequence: "Up"
onActivated: {
// yadda yadda
}
}
在另一个文件中,我有几个这样的 Keys.onPressed 调用:
Keys.onPressed: {
if (event.key == Qt.Key_Up) {
// yadda yadda
}
}
显然,快捷方式干扰了 OnPressed 调用。当我注释掉快捷方式时,OnPressed 的工作正常。但是当它们都处于活动状态时,快捷方式似乎会拦截键盘按下并阻止 OnPressed 激活。
我知道对于鼠标事件,Qt 有 "accepted" 变量。如果您希望事件继续向下传播到堆栈,您只需在 OnActivated 函数中设置 "accepted = false" 即可完成此操作。但是,我在快捷方式 API 中没有看到任何等效的 "accepted" 变量。有没有其他方法可以确保事件正确传播?
为了像快捷方式一样,Shortcut
必须比活动焦点项中的键处理程序具有更高的优先级。否则它与普通的密钥处理程序没有什么不同。但是,有时需要像您一样覆盖快捷方式。
在 Qt 5.8 及更早版本中,您可以 disable 一个 Shortcut
以防止它在某些条件下处理快捷事件。例如:
Shortcut {
enabled: !someItem.activeFocus
}
在Qt 5.9中,为此引入了更好的机制。具有键处理程序的活动焦点项现在可以通过使用 Keys.shortcutOverride
接受快捷方式覆盖事件来覆盖快捷方式。例如:
Item {
focus: true
Keys.onShortcutOverride: {
if (event.key == Qt.Key_Up)
event.accepted = true
}
Keys.onUpPressed: ...
}