QtQuick2快捷方式未触发

Posted

技术标签:

【中文标题】QtQuick2快捷方式未触发【英文标题】:QtQuick2 Shortcut not triggered 【发布时间】:2018-01-18 10:17:19 【问题描述】:

我正在使用 Qt 5.8.0 向 QtQuick Controls2 应用程序添加键盘快捷键,并且我想使用 QKeySequence 控制标签栏,如下所示:

ApplicationWindow 
  ...
  Shortcut 
      sequence: StandardKey.NextChild
      onActivated: tabBar.nextTab()
  

  Shortcut 
      sequence: StandardKey.PreviousChild
      onActivated: tabBar.previousTab()
  


TabBar 
  id: tabBar
  ...
  function nextTab() 
    console.log("next tab")
    if((currentIndex + 1) < contentChildren.length)
      currentIndex += 1
    else
      currentIndex = 0
  

  function previousTab() 
    console.log("previous tab")
    if((currentIndex - 1) > 0)
      currentIndex -= 1
    else
      currentIndex = contentChildren.length - 1
  

这适用于使用 Ctrl+Tab 的 NextChild 序列,但是 PreviousChild 序列不起作用。我检查了documentation,它声称在 Windows 中,previousChild 序列是 Ctrl+Shift+Tab,正如我所料。

我添加了一个console.log() 来检查该函数是否被调用,而它没有。 由于我对这两个函数使用相同的代码,我只能假设键序列是错误的,或者还有什么我遗漏的吗?

【问题讨论】:

【参考方案1】:

这似乎是一个 Qt 错误 https://bugreports.qt.io/browse/QTBUG-15746

或者,您可以将 previousChild 快捷方式定义为

Shortcut 
    sequence:  "Ctrl+Shift+Tab"
    onActivated: 
        tabBar.previousTab()
    

这不是重点,但您的 previousTab 实现中存在一个小的索引错误

function previousTab() 
    console.log("previous tab")
    if(currentIndex > 0) // Instead of (currentIndex - 1) > 0
        currentIndex--
    else
        currentIndex = contentChildren.length-1

【讨论】:

以上是关于QtQuick2快捷方式未触发的主要内容,如果未能解决你的问题,请参考以下文章

仅触发一次热键/快捷方式事件

Android 应用程序未从快捷方式启动

SiriKit:在 IntentsDefinition 文件中定义的快捷方式未显示在 macOS 的快捷方式应用程序中?

Inno Setup 开始菜单卸载快捷方式未在 Windows 10 上显示

Sublimelinter(PC):如何触发此快捷方式(“Lint This View”):Ctrl K,l?

运行时分配操作的快捷方式不会在自定义组件中触发