Qt的QValidator?

时间:2011-09-15 12:33:08

标签: qt

我正在验证我的TextBox只能使用1-75之间的数字。 我可以使用以下代码来完成此操作:

QValidator *validator = new QIntValidator(1, 75, this);
QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);

但现在问题是它也需要零。我想避免零 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:11)

您目前尚未验证:当您设置QValidator时,您只是将字符过滤为可能构成有效输入的字符。

为了进行实际验证,您必须检查QLineEdit::hasAcceptableInput()是否返回true

例如,在连接到textChanged()信号的插槽中,您可以根据acceptableInput属性的值启用/禁用提交数据的按钮,从而阻止用户进一步操作使用无效值和/或更改文本颜色(红色表示无效)。

对于数值,您还可以使用QSpinBox代替QLineEdit。如果编辑完成时该值无效,则可以定义其范围(最小/最大)及其行为(使用QSpinBox::setCorrectionMode)。

答案 1 :(得分:2)

当您编写'0'时,Qt会在编辑过程中解释而不是合理的中间值。 如果您不喜欢这种行为,则需要从QIntValidator创建一个继承类并重新实现以下函数:

virtual QValidator::State validate ( QString & input, int & pos ) const

问候。

答案 2 :(得分:2)

您可以像这样编写验证器:

 class lvalidator : public QValidator
    {
        Q_OBJECT
    public:
        explicit lvalidator(QObject *parent = 0);
        virtual State validate ( QString & input, int & pos ) const
        {
            if (input.isEmpty())
                return Acceptable;

            bool b;
            int val = input.toInt(&b);

            if ((b == true) && (val > 0) && (val < 76))
            {
                return Acceptable;
            }
            return Invalid;
        }
    };