首页 > 解决方案 > QML TextInput 忽略 inputMethodHints

问题描述

我正在 QML 中创建自定义文本输入。它的一个配置是它是一个应该只接受数字的字段,我这样做是这样的:

import QtQuick 2.6

Item {

    property string vmFont: "Mono"
    property string vmPlaceHolder: "Some text ..."
    property bool vmNumbersOnly: false

    // Qt Quick approach to make internal variables.
    Item {
        id: own
        property string enteredText: ""
    }

    Rectangle {
        id: lineEditRect
        anchors.fill: parent
        color: "#e4f1fd"
        radius: 2
    }

    TextInput {
        id: lineEdit
        text: vmPlaceHolder
        color: "#5499d5"
        font.family: vmFont
        font.pixelSize: 13
        anchors.bottom: parent.bottom
        //inputMethodHints: vmNumbersOnly ? Qt.ImhDigitsOnly : Qt.ImhNone
        inputMethodHints: Qt.ImhDigitsOnly
        verticalAlignment: TextInput.AlignVCenter
        leftPadding: 10
        width: lineEditRect.width
        height: lineEditRect.height
        onActiveFocusChanged: {
            if (activeFocus){
                if (own.enteredText === ""){
                    // Removing the placeholder
                    lineEdit.text = "";
                }
            }
        }

        onEditingFinished: {
            own.enteredText = lineEdit.text;
            if (lineEdit.text === ""){
                lineEdit.text = vmPlaceHolder
            }
        }
    }

}

然而,即使 inputMethodHits 设置为 Qt.ImhDigitsOnly,文本输入仍然接受各种按键。我究竟做错了什么?

标签: qtqml

解决方案


我认为这inputMethodHints是针对虚拟键盘(例如手机软件键盘、Qt 虚拟键盘等)。要在使用物理键盘时限制输入(虽然也可以在使用虚拟键盘时使用),您可以使用inputMaskvalidator。例如,以下代码将只允许输入 0 到 9 的四位数字:

TextInput {
    inputMask: "9999"
}

可以将inputMethodHints其视为影响虚拟键盘显示的内容及其行为方式,而这些属性会影响其TextInput本身允许作为输入的内容。


推荐阅读