我正在用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,文本输入仍然接受所有类型的按键。我做错了什么?
答案 0 :(得分:2)
我认为inputMethodHints
适用于虚拟键盘(例如手机软件键盘,Qt虚拟键盘等)。要在使用物理键盘时限制输入(尽管也可以在使用虚拟键盘时使用),您可以使用inputMask
和validator
。例如,以下代码只允许输入0到9的四个数字:
TextInput {
inputMask: "9999"
}
将inputMethodHints
视为影响虚拟键盘显示的内容及其行为方式,并将这些属性视为影响TextInput
本身允许输入的内容。
答案 1 :(得分:0)
它可以在任何设备上为我工作:
TextInput {
validator: RegExpValidator{regExp: /[0-9]+/}
}