qt - 如何获取 QML Action 快捷方式的平台 native 字符串?

标签 qt qml qtquick2 qtquickcontrols2

我有一个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
    

    但是这样的属性并不存在。

最佳答案

似乎没有直接的方法来实现这一点。

解决方法是:

  1. 创建禁用的快捷方式
    这将通过其 nativeText 属性为我们提供平台 native 表示。
  2. 派生自 Action 并添加自定义属性来保存快捷方式
    这是必要的,因为 Actionshortcut 属性将始终返回一个字符串,该字符串将被 Shortcut 错误地解释> 使用 StandardKey 时的项目(Shortcut 项目会将整数值解释为快捷方式,因此您会得到 "3" 而不是 >“Ctrl+O”)。
  3. 将自定义属性绑定(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/

相关文章:

qt - 清除 QML anchor

c++ - 如何始终编译文件?

c++ - 如何创建用于 QML 的通用对象模型?

c++ - 如何将 "full screen"按钮添加到最右侧的标题栏?

c++ - 为什么 QFileInfo::isExecutable() 对 ".msi"文件返回 false?

c++ - Qt TableView 模型 setData() 使应用程序崩溃

qt - QML 中与 DPI 无关的常量大小

c++ - 使用 QTeeView 代替 QTreeWidget

qt - QML 不使用细字体粗细

qt - QML 中的时间选择器