QML中的时间输入的TextField验证

时间:2017-11-23 10:09:03

标签: regex qt qml textfield qtquickcontrols2

我有TextField允许用户输入时间,我使用RegValidator进行验证。目前,我需要在用户点击退格后立即用" 0" 填充特定位置。以下是代码:

TextField {
    id:textField
    text:"11:11:11"
    width:200
    height:80
    font.pointSize: 15
    color:"white"
    inputMask: "99:99:99"
    validator: RegExpValidator { regExp: /^([0-1\s]?[0-9\s]|2[0-3\s]):([0-5\s][0-9\s]):([0-5\s][0-9\s])$ / }
    horizontalAlignment: Text.AlignHCenter
    verticalAlignment: Text.AlignVCenter
    inputMethodHints: Qt.ImhDigitsOnly
}

2 个答案:

答案 0 :(得分:0)

  

当用户点击退格

你的意思是只是按下退格键?那就是这样的:

TextField {
    ..
    Keys.onBackPressed: text = "00:00:00"
}

编辑

为了只重置光标所在的数字之一,您可以执行以下操作。我没有测试它,也许有些索引是错误的,但你明白了

TextField {
    ..
    Keys.onBackPressed: {
        var index = cursorPosition
        var char = text.charAt(index)
        if(char != ":"){
            text = text.substr(0, index) + "0"+ text.substr(index);
        }

    }
}

http://doc.qt.io/qt-5/qml-qtquick-controls-textfield.html#cursorPosition-prop

答案 1 :(得分:0)

实际上,您可以使用TextInput的 displayText 功能,例如:

   TextInput {

      id: textInput

      inputMask: "00:00:00;0"

      onDisplayTextChanged: {

         // when user backspacing or deleting some character,
         // this property become as visible value: "03:01:35"
         // but text property has value: "03:1:35"

         console.log(displayText); 
      }
   }