Qt中的QValidator?

Qt中的QValidator?,qt,Qt,我正在验证我的文本框是否只包含1-75之间的数字。 我可以使用以下代码完成此操作: QValidator *validator = new QIntValidator(1, 75, this); QLineEdit *edit = new QLineEdit(this); edit->setValidator(validator); 但现在的问题是它也需要零。我想避免零 非常感谢您的帮助。当您编写“0”时,Qt在编辑过程中解释的中间值可能会超过一个合理的中间值。 如果不喜欢此行为,则需要

我正在验证我的文本框是否只包含1-75之间的数字。 我可以使用以下代码完成此操作:

QValidator *validator = new QIntValidator(1, 75, this);
QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);
但现在的问题是它也需要零。我想避免零
非常感谢您的帮助。

当您编写“0”时,Qt在编辑过程中解释的中间值可能会超过一个合理的中间值。 如果不喜欢此行为,则需要从
QIntValidator
创建继承类,并重新实现以下功能:

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

尊敬。

您可以这样编写验证器:

 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;
        }
    };
类lvalidator:公共QValidator
{
Q_对象
公众:
显式lvalidator(QObject*parent=0);
虚拟状态验证(QString&input,int&pos)常量
{
if(input.isEmpty())
可接受退货;
布尔b;
int val=input.toInt(&b);
如果((b==true)&&(val>0)&&(val<76))
{
可接受退货;
}
返回无效;
}
};

您当前没有进行验证:当您设置
QValidator
时,您只是将字符过滤为可以构成有效输入的字符

为了进行实际验证,您必须检查是否返回
true

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


对于数值,也可以使用
QSpinBox
而不是
QLineEdit
。您可以定义其范围(最小值/最大值),以及编辑完成时该值无效时的行为(使用)。

是否有理由为布尔分配堆内存,而不是使用堆栈并获取其地址?这不会造成内存泄漏吗?请不要忘记定义构造函数:)