如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?

Posted

技术标签:

【中文标题】如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?【英文标题】:How to catch Key_Cancel pressed from virtual keyboard in qml? 【发布时间】:2019-06-17 11:38:30 【问题描述】:

我有以下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 内容,并可能在按下取消按钮之前撤消对文本字段所做的更改。

谢谢。

【问题讨论】:

【参考方案1】:

我认为唯一的方法是在 Key 代码本身中对其进行响应(textBeforeEditing 是您自己的变量):

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

缺点是它使用私有 API。

【讨论】:

所以,我必须放入Key Key_Cancel 范围内吗?但是虚拟键盘布局真的有可能知道textBeforeEditing 变量吗? 我想是的,是的。是的,变量应该没有问题。试试看,让我知道它是否有效。 :)

以上是关于如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?的主要内容,如果未能解决你的问题,请参考以下文章

从 QML 生成 KeyEvent

在Android中使用虚拟键盘按下键?

在 mfc 应用程序中捕获键盘上按下的键

如何让 LED 代码从键盘按下运行

删除虚拟键盘QML中的“英式英语”

Android:捕捉按下键盘输入按钮的动作