QValidator 验证器一般用于只能输入允许的或者指定的数据。
编辑框或者其他输入控件 可以通过类似于SetValidator来指定这个验证器。
由于 QValidator 有一个纯虚函数 validate.所以必须要写一个 类来继承,然后实现这个纯虚函数才行。
virtual State | validate(QString & input, int & pos) const = 0 |
在这个函数里面实现对于input的字符串的检查,然后返回对应的状态,确认是否允许输入。
返回State有三种状态
QValidator::Invalid
明确这个输入是不允许的
QValidator::Intermediate
这个输入处在中间状态,还无法判断。需要后续。例如输入ip地址000.000.000.000这样可以返回intermediate。然后在fixup里面修复成0.0.0.0 (其实还是没太理解这里怎么用)。
QValidator::Acceptable
这个输入是允许的
注意1. QValidator有QObject parent=0参数。继承类也最好使用这个parent构造函数参数。当new的时候指定这个parent关联。
避免内存泄漏了。
lineedit->setValidator(new myValidator(lineedit));
注意2 由于input和pos是传入的引用。所以觉得输入不合适的时候。可以自己修改字符和光标位置。但是修改完毕以后。必须返回intermediate或者acceptable。否则就无效。
这个的应用实例很多。比如输入ip地址的时候。输入25是可以的。再输入5也可以 255。但是输入6就不行了 256超过了。这个时候可以把input前面的25去掉。然后光标也移动。
pos=pos-3
input.truncate(pos);
这样就不用手工再删除前面的25
fixup函数(有待验证)
当最终的状态不是acceptable的时候。会调用一次fixup函数。修复错误。如果是acceptable就不会调用