2015-05-27 46 views
1

我有以下TextInput元件:Qt4.7 QML的TextInput空状态检测

TextInput { 
    id: textInput 
    text: m_init 
    anchors.centerIn: parent 
    font.family : "Helvetica" 
    font.pixelSize: 14 
    color: "black" 
    maximumLength: 2 
    smooth: true 
    inputMask: "HH" 

    states : [ 
     State { 
      name: "EmptyInputLeft" 
      when: !text.length 

      PropertyChanges { 
       target: textInput 
       text : "00" 
      } 
     } 
    ] 
} 

我想显示00当一切已经从它通过退格键被移除。我为此编了一个State,但它不能按预期工作。我究竟做错了什么?

回答

0

您有:“ QML TextInput:检测到属性”文本“的绑定循环”上面的代码错误。原因是,当您将文本设置为“00”时,长度会发生变化,从而再次触发“when”子句(并再次设置),并导致循环错误。

这里是一个变通使用验证:

TextInput { 
    id: textInput 
    text: m_init 
    anchors.centerIn: parent 
    font.family : "Helvetica" 
    font.pixelSize: 14 
    color: "black" 
    maximumLength: 2 
    smooth: true 
    inputMask: "00" 
    //validator: RegExpValidator { regExp: /^([0-9]|0[0-9]|1[0-9]|2[0-3])/ } //max 23 hours 
    validator: RegExpValidator { 
     regExp: /^([0-9]|[0-9]/ } //any two digits 

} 

也许结合文本功能:

text: myFunction() 

与onTextChanged事件的同时,可能会产生更好的效果:

onTextChanged: { 
//some code 
myFunction() 
} 
function myFunction(){ 
//some validation 
    return "00" 
} 
0

对于TextField有这样的属性placeholderText - 使用它l ike this:

TextField { 
    id: textInput 
    text: m_init 
    placeholderText: "00" 
    ... 
}