我有一个Qt Quick Controls 2 Action使用快捷方式:
Action {
id: myAction
shortcut: "Ctrl+D"
}
如何获取快捷方式的平台 native 表示?
这是我已经尝试过的:
立即使用快捷方式,例如
ToolTip.text: myAction.shortcut
但是,这会返回定义的快捷方式(例如,
"Ctrl+D"
),而不是平台 native 表示形式(例如,"⌘D"
) 。如果使用StandardKey
,它也会返回不正确的结果,因为它给出的是StandardKey
的整数值,而不是相应的组合键。使用
nativeText
属性,例如ToolTip.text: myAction.shortcut.nativeText
但是这样的属性并不存在。
最佳答案
似乎没有直接的方法来实现这一点。
解决方法是:
- 创建禁用的
快捷方式
项
这将通过其nativeText
属性为我们提供平台 native 表示。 - 派生自
Action
并添加自定义属性来保存快捷方式
这是必要的,因为Action
的shortcut
属性将始终返回一个字符串,该字符串将被Shortcut
错误地解释> 使用StandardKey
时的项目(Shortcut
项目会将整数值解释为快捷方式,因此您会得到"3"
而不是>“Ctrl+O”
)。 - 将自定义属性绑定(bind)到
Action
快捷方式和Shortcut
序列
所以在代码中:
自定义操作.qml
import QtQuick 2.7
import QtQuick.Controls 2.4
Action {
/* Custom property */
property var keySequence
shortcut: keySequence
}
工具提示按钮.qml
import QtQuick 2.7
import QtQuick.Controls 2.4
Button {
/* Disabled Shortcut */
Shortcut {
id: dummyShortcut
enabled: false
sequence: action.keySequence
}
hoverEnabled: true
ToolTip.visible: hovered
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.text: dummyShortcut.nativeText
}
像这样使用:
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.4
ApplicationWindow {
visible: true
CustomAction {
id: myAction
keySequence: StandardKey.Open
}
ToolTipButton {
id: myButton
action: myAction
text: "Trigger my action"
}
}
关于qt - 如何获取 QML Action 快捷方式的平台 native 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017831/