The QValidator class provides validation of input text.
The class itself is abstract. Two subclasses, QIntValidator and QDoubleValidator, provide basic numeric-range checking, and QRegExpValidator provides general checking using a custom regular expression.
一大顿都是英文,其实说简单点,Qvalidator常用来设置输入框的合法性,当合法时,才能成功输入并显示到输入框。
QValidator就是一个抽象类,其子类QIntValidator、QDoubleValidator两个类是用来设置合法int和合法Double,而还有一个子类QRegExpValidator是用来结合正则表达式,判断合法性。
This enum type defines the states in which a validated string can exist.
Constant | Value | Description |
---|---|---|
QValidator::Invalid |
0 |
The string is clearly invalid. |
QValidator::Intermediate |
1 |
The string is a plausible intermediate value. |
QValidator::Acceptable |
2 |
The string is acceptable as a final result; i.e. it is valid. |
QValidator里面有一个枚举类型,state,包含Invalid、Intermediate、Acceptable,分别表示不合法、半合法、合法三种类型,其中半合法表示当前类型不合法,但是有可能在继续的输入后,成为合法的数据,比如你检测的合法序列是10-99,而现在用户输入了一个4,则返回Intermediate,因为用户可能继续输入一个5,变成了45,即为合法序列了。
使用QIntValidator,可以设置合法的整数范围,如:
port_edit.setValidator(QIntValidator(0,65535))
其中port_edit是一个LineEdit的对象,调用setValidator可以为它设置合法器。
在我上一篇海康摄像头设置窗口中,也是利用该方法,但上一篇内容比较复杂,为了演示,在网上找到一篇比较好的示例:
PyQt4学习--QLineEdit加入正则判断IP
利用QValidator.validate(str)函数,可以判断字符串str是否满足合法器,返回一个状态元组:
port = '8080'
port_validator = QIntValidator(0,65535)
port_validator.validate(port,0)#第二个参数我还没弄懂什么意思,不过默认用0就行,否则会报错
#输出:(2, '8080', 0)
可以看出,输出元组的第一个元素,其实就是QValidator的State枚举类型,2表示合法,我们可以用它来判断是否通过合法器
port_validator.validate(port,0)[0] == QValidator.Acceptable
#输出: True