我正在验证我的TextBox只能使用1-75之间的数字。 我可以使用以下代码来完成此操作:
QValidator *validator = new QIntValidator(1, 75, this);
QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);
但现在问题是它也需要零。我想避免零 任何帮助表示赞赏。
答案 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;
}
};