Как получить собственную строку платформы для ярлыка QML Action? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть Qt Quick Controls 2 Action с ярлыком:

Action {
    id: myAction
    shortcut: "Ctrl+D"
}

Как получить собственное представление ярлыка на платформе?

Вот что я уже пробовал:

  • Использование ярлыка сразу как

    ToolTip.text: myAction.shortcut
    

    Однако это возвращает ярлык, как определено (например, "Ctrl+D"), а не собственное представление платформы (например, "⌘D"). Он также возвращает неверные результаты в случае использования StandardKey, поскольку он дает целочисленное значение StandardKey, а не соответствующую комбинацию клавиш.

  • Использование свойства nativeText, например

    ToolTip.text: myAction.shortcut.nativeText
    

    Но такого свойства не существует.

1 Ответ

1 голос
/ 07 мая 2019

Кажется, нет простого способа получить это.

Обходной путь:

  1. Создать отключенный Shortcut элемент
    Это даст нам собственное представление платформы через его свойство nativeText.
  2. Извлечение из Action и добавление пользовательского свойства для хранения ярлыка
    Это необходимо, поскольку shortcut свойство Action будет всегда возвращать строку, которая будет неправильно интерпретироваться элементом Shortcut при использовании StandardKey (элемент Shortcut будет интерпретировать целочисленное значение как ярлыктаким образом, вы получите "3" вместо "Ctrl+O").
  3. Свяжите пользовательское свойство с ярлыком Action и с последовательностью Shortcut

Так в коде:

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"
    }

}
...