Как поймать нажатие Key_Cancel с виртуальной клавиатуры в qml?

У меня есть следующее TextField в качестве поля ввода, которое связано с виртуальной клавиатурой.

TextField {
        id: inputField
        color: buttonActive ? Style.buttonColorTextOn : Style.buttonColorTextOff
        text: "100"
        topPadding: 8
        anchors.left: parent.left
        anchors.leftMargin: 8
        anchors.right: icon.left
        anchors.rightMargin: 8
        anchors.top: parent.top
        anchors.topMargin: 6
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 6
        inputMethodHints: Qt.ImhDigitsOnly
        validator: IntValidator { bottom:lowestInput; top: highestInput}
        selectionColor: Style.textSelectionBg
        selectedTextColor: Style.fontcolor1
        font.family: stdFont.name
        horizontalAlignment: TextField.AlignRight
        verticalAlignment: TextField.AlignVCenter
        font.pixelSize: Style.highlightedFontSize
        leftPadding: 3
        rightPadding: 3
        TextMetrics{
            id: textMetrics
            text: inputField.text
            font.family: stdFont.name
            font.pixelSize: Style.highlightedFontSize
        }

        background: Rectangle
        {
            color: buttonActive ? Style.buttonColorOn : Style.buttonColorOff
            border.color: buttonActive ? Style.buttonColorTextOn : Style.buttonColorTextOff
            border.width: 1
            Rectangle
            {
                id: inputFieldColor
                color: buttonActive ? Style.buttonColorOn : Style.buttonColorOff
                anchors.top: parent.top
                anchors.topMargin: inputField.topPadding - 1
                anchors.right: parent.right
                anchors.rightMargin: inputField.rightPadding - 1
                width: textMetrics.width + inputField.rightPadding
                height: textMetrics.height
            }
        }
    }

Эта клавиатура выглядит следующим образом.

введите здесь описание изображения

Здесь клавиша отмены построена следующим образом в пользовательской раскладке клавиатуры.

Key {
                key: Qt.Key_Cancel
                text: "cancel"
}

У меня вопрос, как мне отловить нажатие кнопки отмены на виртуальной клавиатуре? Я хотел бы поймать что-то в слоте onKeyCancelPressed и, возможно, отменить изменения, внесенные в текстовое поле, перед нажатием кнопки отмены.

Спасибо.


person the_naive    schedule 17.06.2019    source источник


Ответы (1)


Я думаю, что единственный способ — ответить на него в самом коде ключа (textBeforeEditing — ваша собственная переменная):

onClicked: InputContext.priv.inputItem.text = InputContext.priv.inputItem.textBeforeEditing

Недостатком является то, что здесь используется частный API.

person Mitch    schedule 17.06.2019
comment
Итак, я должен поставить в область Key { } Key_Cancel? Но действительно ли раскладка виртуальной клавиатуры может знать о переменной textBeforeEditing? - person the_naive; 17.06.2019
comment
Я так думаю, да. Да, у него не должно быть проблем с переменной. Попробуйте и дайте мне знать, если это работает. :) - person Mitch; 17.06.2019