我正在验证我的文本框,使其只接受1-75之间的数字。 通过使用以下代码,我能够实现这一点:
QValidator *validator = new QIntValidator(1, 75, this);
QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);
但现在的问题是它也接受零。我想避免零。任何帮助都将不胜感激。
我正在验证我的文本框,使其只接受1-75之间的数字。 通过使用以下代码,我能够实现这一点:
QValidator *validator = new QIntValidator(1, 75, this);
QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);
当前您并未进行验证:当您设置一个QValidator
时,只是对可以组成有效输入的字符进行过滤。
为了进行实际的验证,您需要检查QLineEdit::hasAcceptableInput()
返回的值是否为true
。
例如,在连接到textChanged()
信号的槽中,您可以根据acceptableInput
属性的值启用/禁用提交数据的按钮,防止用户使用无效值继续进行,并/或更改文本颜色(无效值为红色)。
对于数值,您还可以使用QSpinBox
而不是QLineEdit
。您可以定义其范围(最小/最大值),以及在编辑完成时值无效时的行为(使用QSpinBox::setCorrectionMode
)。
您可以这样编写自己的验证器:
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;
}
};
当你输入'0'时,Qt会将其解释为可编辑的合理中间值。如果你不喜欢这种行为,你需要创建一个继承自QIntValidator
的类,并重新实现以下函数:
virtual QValidator::State validate ( QString & input, int & pos ) const
致敬。