如何验证 TextField 输入是否为长整数?

如何验证 TextField 输入是否为长整数?

我需要用户能够输入一个整数,限制为 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
    }

}

IntValidator 屏幕截图

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
    }

}

DoubleValidator 屏幕截图


为什么这没有按预期工作?

如何验证长整数输入?

答案1

添加notation: DoubleValidator.StandardNotation双重验证器修复了这个问题。从其文档中:

如果将记法设置为 DoubleValidator.StandardNotation,并且输入的小数点前位数多于有效范围内的双精度数,则也会被拒绝。如果记法为 DoubleValidator.ScientificNotation,并且输入不在有效范围内,则它会被接受但无效。通过更改指数,该值仍可能变得有效。

相关内容