我需要用户能够输入一个整数,限制为 0 到上限之间的值。上限太大,无法容纳在“int”数据类型中,因此我使用了 DoubleValidator 的“real”数据类型。
DoubleValidator 没有正确限制上限,而具有 int 值的 IntValidator 可以按预期工作。
IntValidator 示例
这会将输入的文本限制为 0 到 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
}
}
DoubleValidator 示例
这会将输入的文本限制为整数值(小数点后 0 位的双精度数),并确保该值大于或等于 0。但是,允许超过 1e10 的值 - 与预期相反。
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
}
}
为什么这没有按预期工作?
如何验证长整数输入?
答案1
添加notation: DoubleValidator.StandardNotation
到双重验证器修复了这个问题。从其文档中:
如果将记法设置为 DoubleValidator.StandardNotation,并且输入的小数点前位数多于有效范围内的双精度数,则也会被拒绝。如果记法为 DoubleValidator.ScientificNotation,并且输入不在有效范围内,则它会被接受但无效。通过更改指数,该值仍可能变得有效。