Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何获取QML操作快捷方式的平台本机字符串?_Qt_Qml_Qtquick2_Qtquickcontrols2 - Fatal编程技术网

Qt 如何获取QML操作快捷方式的平台本机字符串?

Qt 如何获取QML操作快捷方式的平台本机字符串?,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我有一个快捷方式: Action { id: myAction shortcut: "Ctrl+D" } 如何获取快捷方式的平台本机表示形式 以下是我已经尝试过的: 立即使用快捷方式,就像 ToolTip.text: myAction.shortcut 但是,这将返回定义的快捷方式(例如,“Ctrl+D”),而不是平台本机表示(例如,)⌘D“)。如果使用StandardKey,它也会返回不正确的结果,因为它给出的是StandardKey的整数值,而不是相应的键组合 使用na

我有一个快捷方式:

Action {
    id: myAction
    shortcut: "Ctrl+D"
}
如何获取快捷方式的平台本机表示形式

以下是我已经尝试过的:

  • 立即使用快捷方式,就像

    ToolTip.text: myAction.shortcut
    
    但是,这将返回定义的快捷方式(例如,
    “Ctrl+D”
    ),而不是平台本机表示(例如,
    )⌘D“
    )。如果使用
    StandardKey
    ,它也会返回不正确的结果,因为它给出的是
    StandardKey
    的整数值,而不是相应的键组合

  • 使用
    nativeText
    属性,如

    ToolTip.text: myAction.shortcut.nativeText
    
    但这样的财产并不存在


要做到这一点,似乎没有直截了当的方法

解决办法是:

  • 创建禁用的
    快捷方式
    项目

    这将通过其
    nativeText
    属性为我们提供平台本机表示
  • 派生自
    操作
    并添加自定义属性以保存快捷方式

    这是必要的,因为
    操作的
    快捷方式
    属性将始终返回一个字符串,当使用
    标准键
    时,
    快捷方式
    项将错误地解释该字符串。
    快捷方式
    项将整数值解释为快捷方式,因此您将得到一个
    “3”
    而不是
    “Ctrl+O”
  • 将自定义属性绑定到
    操作
    快捷方式和
    快捷方式
    序列
  • 因此,在代码中:

    CustomAction.qml

    import QtQuick 2.7
    import QtQuick.Controls 2.4
    
    Action {
        /* Custom property */
        property var keySequence
        shortcut: keySequence
    }
    
    ToolTipButton.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"
        }
    
    }