1.1 QValidator注意的点
这个类本身是抽象类。两个子类QIntValidator和QDoubleValidator提供了基本的数字范围检查,并且QRegExpValidator提供了一个使用自定义正则表达式的普通检查。
如果内置的验证器还不够的话,你可以继承QValidator。这个类有两个虚函数:validate()和fixup()。
validate()必须被每个子类重新实现。根据参数是否有效(子类中来定义这个有效)返回Invalid、Intermediate或Acceptable。
这三种状态需要一些解释。
Invalid是指字符串明显地无效。
Intermediate是不太明显的——当字符串在不完整的时候(还在被编辑),这个有效的概念是要小心对待的。既不是明显地无效也不是作为最终结果可以接受的。输入的过程中是似是而非的中间状态。
Acceptable意味着作为最终结果这个字符串是可以接受的。
1.2 实践闭坑
我在写代码的时候发现,设置了QIntValidator的bottom(1),之后,仍然可以输入0, ,validate会认为是一个Intermediate状态。
因此。需要重新定义一个类,实现fixup
void My
DoubleValidator::fixup(QString &s) const
{
s = QString("%1").arg(bottom());
}