这里我有一个最小的例子:
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
menu.open();
}
Menu {
id: menu
Keys.onPressed: {
console.log("pressed")
}
MenuItem {
text: "test"
Keys.forwardTo: [menu]
focus: highlighted
onTriggered: {
console.log("triggered 1")
}
}
MenuItem {
text: "test2"
focus: highlighted
Keys.forwardTo: [menu]
onTriggered: {
console.log("triggered 2")
}
}
MenuItem {
text: "test3"
focus: highlighted
Keys.forwardTo: [menu]
onTriggered: {
console.log("triggered 3")
}
}
}
}
使用键盘浏览菜单项按预期方式工作。但是使用Enter键触发不起作用。另外,作为一种解决方法,我尝试将关键事件转发到父菜单项,但它也不起作用。
我现在看到解决它的唯一方法:将Keys.onReturnPressed
放在每个MenuItem上并调用triggered()信号。但感觉不对。
这是Qt的错误吗? 什么是正确的解决方法呢?
我正在使用Qt 5.10.1
答案 0 :(得分:2)
Menu
不是Item
,因此无法设置为Keys.forwardTo
。
默认情况下启用Menu
通过Forward/Backward
键的导航,Keys.forwardTo
不是必需的。
为什么输入密钥不起作用,因为选择MenuItem
使用Space
密钥而非Enter
密钥。 [↑]
和[↓]
适用于Navigation(focus)
而[Space]
适用于Selection
我想如果你想听取[Enter]
的{{1}}密钥,添加Selection
是正确的方法。
<强>更新强>
Keys.onReturnPressed: triggered();
密钥在Qt 5.6(已验证)中工作。检查source代码。但看起来它在当前版本中被删除了。