Qt中的QValidator?
我正在验证我的文本框是否只包含1-75之间的数字。 我可以使用以下代码完成此操作:Qt中的QValidator?,qt,Qt,我正在验证我的文本框是否只包含1-75之间的数字。 我可以使用以下代码完成此操作: QValidator *validator = new QIntValidator(1, 75, this); QLineEdit *edit = new QLineEdit(this); edit->setValidator(validator); 但现在的问题是它也需要零。我想避免零 非常感谢您的帮助。当您编写“0”时,Qt在编辑过程中解释的中间值可能会超过一个合理的中间值。 如果不喜欢此行为,则需要
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
。您可以定义其范围(最小值/最大值),以及编辑完成时该值无效时的行为(使用)。是否有理由为布尔分配堆内存,而不是使用堆栈并获取其地址?这不会造成内存泄漏吗?请不要忘记定义构造函数:)