QML键盘快捷键会干扰Key OnPressed Events
问题描述:
我遇到了QML程序问题。在顶层main.qml文件,我有一些键盘快捷键,像这样:QML键盘快捷键会干扰Key OnPressed Events
Shortcut {
sequence: "Up"
onActivated: {
// yadda yadda
}
}
在另一个文件中,我有几个Keys.onPressed要求是这样的:
Keys.onPressed: {
if (event.key == Qt.Key_Up) {
// yadda yadda
}
}
显然,快捷方式正在干扰OnPressed呼叫。当我评论快捷键时,OnPressed的工作很好。但是,当它们都处于活动状态时,Shortcut似乎会拦截键盘按键并阻止OnPressed启动。
我知道,用鼠标事件,Qt有“接受”变量。如果您希望事件继续向下传播,您可以在OnActivated函数中设置“accepted = false”来完成此操作。但是,我在Shortcuts API中看不到任何等效的“接受”变量。有其他方法可以确保事件传播正确吗?
答
为了表现得像一条快捷方式,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: ...
}
谢谢!我正在使用Qt 5.7。我能够巧妙地设置/取消设置启用的变量以实现我的目标。 – user1765354