QML TextInput忽略inputMethodHints

时间:2018-05-27 10:32:18

标签: qt qml

我正在用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,文本输入仍然接受所有类型的按键。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为inputMethodHints适用于虚拟键盘(例如手机软件键盘,Qt虚拟键盘等)。要在使用物理键盘时限制输入(尽管也可以在使用虚拟键盘时使用),您可以使用inputMaskvalidator。例如,以下代码只允许输入0到9的四个数字:

TextInput {
    inputMask: "9999"
}

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

答案 1 :(得分:0)

它可以在任何设备上为我工作:

TextInput {
    validator: RegExpValidator{regExp: /[0-9]+/}
}