2017-11-23 8 views
1

Ich habe eine TextField, die es dem Benutzer erlaubt, die Zeit einzugeben, und ich habe RegValidator zur Validierung verwendet. Derzeit muss ich die jeweilige Position mit "0" füllen, sobald der Benutzer auf Backspace klickt. Es folgt der Code:TextField Validierung der Zeiteingabe in QML

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 
} 

Antwort

0

, wenn der Benutzer auf Backspace klickt

Sie bedeuten trifft nur auf die Rücktaste? Dann wäre es so etwas wie diese:

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

EDIT

, um nur eine der Zahlen zurückgesetzt werden, wo der Cursor ist, könnten Sie so etwas wie die folgenden Aktionen aus. Ich habe es bisher nicht testen und vielleicht einige der Indizes falsch sind, aber Sie bekommen die Idee

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

+0

Wenn ich den Text „00:00:00“ Es alle Positionen ersetzt auf „0 ". Meine Frage ist: Wenn der Cursor an der 2. Position ist und BackSpace geklickt wird, muss ich an dieser Position eine "0" hinzufügen und wie geht das? Der Grund ist, dass ich nicht zulassen kann, dass das TextField "::" ist, wenn alle Positionen gelöscht sind. – pra7