QValidator 类
QValidator 类提供输入文本的验证。 更多信息...
头文件 | #include <QValidator> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
继承自 | QObject |
继承自 | QDoubleValidator、QIntValidator 和 QRegularExpressionValidator |
公共类型
枚举 | State { Invalid, Intermediate, Acceptable } |
公共函数
QValidator(QObject *parent = nullptr) | |
虚拟 | ~QValidator() |
虚拟 void | fixup(QString &input) const |
QLocale | locale() const |
void | setLocale(const QLocale &locale) |
虚拟 QValidator::State | validate(QString &input, int &pos) const = 0 |
信号
void | changed() |
详细描述
该类本身是抽象的。两个子类,QIntValidator 和 QDoubleValidator,提供基本的数值范围检查,QRegularExpressionValidator 提供使用自定义正则表达式的通用检查。
如果内置验证器不够用,可以子类化 QValidator。该类有两个虚拟函数:validate() 和 fixup()。
validate() 必须在每个子类中实现。根据其参数是否有效(对于子类的有效性定义)返回 Invalid、Intermediate 或 Acceptable。
这三种状态需要一些解释。一个 无效 字符串显然是无效的。 中间 状态不那么明显:当字符串不完整(仍在编辑中)时,很难应用有效性概念。QValidator 将 中间 定义为一个字符串的特性,这种特性既不是明显无效,也不适用于最终结果。 可接受 意味着字符串可以作为最终结果接受。可以说,任何在输入 可接受 字符串过程中可能出现的中间状态的字符串都是 中间 状态的。
以下是一些例子
- 对于一个接受从10到1000 inclusive的整数的行编辑,42和123是 可接受 的,空字符串、5或1234是 中间 状态,而"asdf"和10114是 无效 的。
- 对于一个接受URL的可编辑组合框,任何格式正确的URL都是 可接受 的,"http://example.com/," 是 中间 状态(可能是一不小心粘贴时的误操作),空字符串是 中间 状态(用户可能选择并删除所有文本以准备输入新的URL),而"http:///./"是 无效 的。
- 对于一个接受长度的滚动框,"11cm"和"1in"是 可接受 的,"11"和空字符串是 中间 状态,而"http://example.com"和"hour"是 无效 的。
fixup() 为可以修复一些用户错误的验证器提供。默认实现不执行任何操作。QLineEdit,例如,如果用户按下Enter(或Return)键且内容当前无效,则会调用 fixup()。这允许 fixup() 函数有机会执行一些操作,使一个 无效 字符串变为 可接受 的。
验证器有一个区域设置,使用 setLocale() 设置。它通常用于解析本地化数据。例如,QIntValidator 和 QDoubleValidator 使用它来解析整数和双精度数的本地化表示。
另请参阅 QIntValidator、QDoubleValidator、QRegularExpressionValidator 和 行编辑示例。
成员类型文档
枚举 QValidator::State
此枚举类型定义了验证字符串可能存在的状态。
常量 | 值 | 描述 |
---|---|---|
QValidator::Invalid | 0 | 字符串显然是无效的。 |
QValidator::Intermediate | 1 | 字符串是可能的中间值。 |
QValidator::Acceptable | 2 | 字符串可以作为最终结果接受;即它是有效的。 |
成员函数文档
[明确]
QValidator::QValidator(QObject *parent = nullptr)
设置验证器。将 parent 参数传递给QObject 构造函数。
[虚拟 noexcept]
QValidator::~QValidator()
销毁验证器,释放任何使用的存储和其他资源。
[信号]
void QValidator::changed()
当可能影响字符串有效性的任何属性发生更改时,将发出此信号。
[虚拟]
void QValidator::fixup(QString &input) const
此函数尝试根据此验证器的规则更改 input 以使其有效。它不需要生成有效的字符串:调用此函数的调用者必须在之后重新测试;默认操作不做任何事情。
此函数的重写可以更改 input,即使它们没有生成有效的字符串。例如,ISBN验证器可能想要删除除数字和 "-" 之外的所有字符,即使结果是无效的ISBN;姓氏验证器可能想要从字符串的开头和结尾删除空白,即使结果字符串也不在可接受的姓氏列表中。
QLocale QValidator::locale() const
返回验证器的区域设置。区域设置默认初始化为 QLocale() 同步。
另请参阅setLocale() 和 QLocale::QLocale。
void QValidator::setLocale(const QLocale &locale)
设置用于验证器的 locale。除非调用 setLocale,否则验证器将使用通过 QLocale::setDefault 设置的默认区域设置。如果没有设置默认区域设置,则它是操作系统的区域设置。
另请参阅locale() 和 QLocale::setDefault。
[纯虚]
QValidator::State QValidator::validate(QString &input, int &pos) const
如果根据此验证器的规则 input 无效,此虚拟函数返回 Invalid,如果它很可能通过稍作编辑就可以使输入接受(例如,用户在允许整数介于 10 和 99 之间的小部件中输入 "4"),则返回 Intermediate,如果输入有效,则返回 Acceptable。
如果需要,该函数可以更改 input 和 pos(光标位置)。
© 2024 The Qt Company Ltd. 本文档中包含的贡献的版权属于其各自的所有者。所提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款授权的。Qt 和相关标志是 The Qt Company Ltd. 在芬兰及其它国家和地区的商标。所有其他商标均属于其各自所有者。