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: ... 
} 
+0

谢谢!我正在使用Qt 5.7。我能够巧妙地设置/取消设置启用的变量以实现我的目标。 – user1765354