Eu preciso que o usuário seja capaz de inserir um número inteiro, restrito a valores entre 0 e um limite superior. O limite superior é muito grande para caber dentro do tipo de dados 'int', então usei um tipo de dados 'real' com um DoubleValidator.
O DoubleValidator não restringe adequadamente o limite superior, enquanto um IntValidator com um valor int funciona conforme o esperado.
Exemplo do IntValidator
Isso restringe o texto digitado a valores inteiros entre 0 e 1000:
import QtQuick 2.0
import Ubuntu.Components 0.1
MainView {
id: main
width: 500
height: 500
TextField {
id: tf
text: "0"
anchors.centerIn: parent
validator: IntValidator {
bottom: 0
top: 1000
}
}
property int value: 0+tf.text
Label {
id: label
text: ""+main.value
}
}
Exemplo do DoubleValidator
Isso restringe o texto digitado a valores inteiros (duplos com 0 casas decimais) e garante que o valor seja maior que ou igual a 0. No entanto, valores excedendo 1e10 são permitidos - ao contrário do que seria esperado.
import QtQuick 2.0
import Ubuntu.Components 0.1
MainView {
id: main
width: 500
height: 500
TextField {
id: tf
text: "0"
anchors.centerIn: parent
validator: DoubleValidator {
bottom: 0
top: 1e10
decimals: 0
}
}
property real value: 0+tf.text
Label {
id: label
text: ""+main.value
}
}
Por que isso não funciona como esperado?
Como a entrada de números inteiros longos pode ser validada?