pyqt4文档阅读(10):QValidator

原创 2016年10月01日 18:13:39

本系列文章长期更新修改.


QValidator,验证器,用于输入时的合法性检查,包括QLineEdit等.

QValidator是一个抽象对象,Qt实现了它的3个子类QIntValidator,QDoubleValidator和QRegExpValidator.


属性:

Types

  • enum State { Invalid, Intermediate, Acceptable }

Methods

  • __init__ (self, QObject parent)
  • fixup (self, QString)
  • QLocale locale (self)
  • setLocale (self, QLocale locale)
  • (State, int) validate (self, QString, int)


详细分析:


1.工作方式

QValidator验证器有两种工作方式.

第一种是显式调用它的判断函数validate(),它会返回3种状态.

枚举量 含义
QValidator.Invalid 0 错误
QValidator.Intermediate 1 错误,但错误可能能更正
QValidator.Acceptable 2 正确
其中最难理解的是Intermediate,我们可以通过下面第二种工作方式辅助理解.

第二种是Qt控件自动调用验证函数,这些控件包括QLineEditQComboBox,它们都有一对验证器相关的函数.

QSpinBox也有相关的函数,但不直接使用QValidator.

  • QValidator validator (self)
  • setValidator (self, QValidator)

当不设置的时候,这些控件默认输入都能通过这个验证(可能还有inputMask验证).

设置了之后,当有键盘输入或者按回车键的时候,这些控件就会调用QValidator的validate(),根据结果它会做不同的动作.

结果 键盘输入 回车键
QValidator.Invalid 输入无效
(无动作)
会调用fixup()修正,再调用一次validate()
如果修正后变成Acceptable,字符串会被修正后的替换,并调整光标
QValidator.Intermediate 输入有效
光标调整
会调用fixup()修正,再调用一次validate()
如果修正后变成Acceptable,字符串会被修正后的替换,并调整光标
QValidator.Acceptable 输入有效
光标调整
光标调整

2.validate()函数

validate()函数是QValidator里最重要的函数,也是每个继承QValidator都需要重新实现的纯虚函数.

它接受两个参数,分别是要检验的字符串,和一个光标当前位置pos.对同一个字符串来说,不同的pos参数一般不会影响结果.

它的返回值是一个二元组,分别是结果状态,和pos参数.在上面的表里有"光标调整"字样的情况,控件会把光标位置调整到pos处.

一般来说,输入的pos和输出的pos是一样的.

  • (State, int) validate (self, QString, int)

3.fixup()函数

fixup()函数的意义在工作方式那里已经说过,它只在控件验证那里被Qt调用,在直接验证的方式时Qt不会自动调用它.

它接受一个字符串参数,并且这个参数也是输出参数,fixup()里会直接修改这个参数,并通过这个参数返回,因此它没有返回值.

  • fixup (self, QString)

4.待续

QLocale locale (self)
setLocale (self, QLocale locale)


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

PyQt4 QLineEdit 使用方法

QLineEdit 单行输入框 lineedit = QLineEdit() 实例化一个输入框 lineedit =setReadOnly(True) #设置为只读 lineedit...

pyqt4文档阅读(7):QSize

QSize

pyqt4文档阅读(6):QGridLayout

QGridLayout

pyqt4文档阅读(11):QKeySequence

QKeySequence

pyqt4文档阅读(10.1):QIntValidator-QDoubleValidator-QRegExpValidator

QIntValidator-QDoubleValidator-QRegExpValidator

pyqt4文档阅读(5):QLineEdit

QLineEdit

pyqt4文档阅读(3):QLCDNumber

QLCDNumber

pyqt4文档阅读(2):QSlider

QSlider

pyqt4文档阅读(7.2):QRect

QRect

pyqt4文档阅读(4):QPushButton

QPushButton
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pyqt4文档阅读(10):QValidator
举报原因:
原因补充:

(最多只允许输入30个字)