我想处理两个关键事件Ctrl
+ Tab
和Ctrl
+ Shift
+ Tab
,以便在我的应用中切换标签(分别“前进”和“后退”。但是,这似乎没有按预期工作。
这是我目前的代码(最小例子):
import QtQuick 1.1
Item {
width: 100
height: 100
focus: true
Keys.onPressed: {
if(event.modifiers & Qt.ControlModifier) {
if(event.key === Qt.Key_Tab) {
if(event.modifiers & Qt.ShiftModifier)
console.log('backward')
else
console.log('forward')
}
}
}
}
我用qmlviewer
(Qt版本4.8.2)
按Ctrl
+ Tab
时的输出:
forward
forward
按Ctrl
+ Shift
+ Tab
时的输出:
无的
所以我看到两个错误:前一个键序列被处理两次而另一个根本没有处理。
为什么会发生这种情况,我该如何解决?
注意:我已经在我的应用程序中使用了Qt Components for Desktop,所以如果您知道需要此模块的解决方案,那就没关系。
答案 0 :(得分:8)
您必须接受该事件,否则该事件将传播给父母,直到被接受为止。以下代码对我有用。
Item {
width: 100
height: 100
focus: true
Keys.onPressed: {
if(event.modifiers && Qt.ControlModifier) {
if(event.key === Qt.Key_Tab) {
console.log('forward')
event.accepted = true;
}
else if(event.key === Qt.Key_Backtab) {
console.log('backward')
event.accepted = true;
}
}
}
}
编辑:此行为允许父母处理孩子无法处理的事件,例如热键。
希望这有帮助!