qt的验证器QValidator

QValidator 验证器一般用于只能输入允许的或者指定的数据。

编辑框或者其他输入控件 可以通过类似于SetValidator来指定这个验证器。


由于 QValidator 有一个纯虚函数 validate.所以必须要写一个 类来继承,然后实现这个纯虚函数才行。

virtual State validate(QString & input, int & pos) const = 0
这个函数返回State状态。 input是当前输入的字符串引用。pos是位置指针的引用。

在这个函数里面实现对于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就不会调用





你可能感兴趣的:(qt的验证器QValidator)