QValidator Class
QValidator 类可对输入文本进行验证。更多
头文件: | #include <QValidator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
继承: | QObject |
继承于 | QDoubleValidator,QIntValidator, 以及QRegularExpressionValidator |
公共类型
enum | State { Invalid, Intermediate, Acceptable } |
公共函数
QValidator(QObject *parent = nullptr) | |
virtual | ~QValidator() |
virtual void | fixup(QString &input) const |
QLocale | locale() const |
void | setLocale(const QLocale &locale) |
virtual QValidator::State | validate(QString &input, int &pos) const = 0 |
信号
void | changed() |
详细说明
该类本身是抽象的。两个子类QIntValidator 和QDoubleValidator 提供基本的数字范围检查,QRegularExpressionValidator 使用自定义正则表达式提供一般检查。
如果内置验证器不够用,可以子类化 QValidator。该类有两个虚函数:validate() 和fixup() 。
validate() 必须由每个子类实现。它根据参数是否有效(子类对 valid 的定义)返回Invalid 、Intermediate 或Acceptable 。
这三种状态需要解释一下。Invalid 字符串显然是无效的。Intermediate 就不那么明显了:当字符串不完整(仍在编辑中)时,有效性的概念很难应用。QValidator 将Intermediate 定义为字符串的属性,它既不是明显无效的,也不是作为最终结果可以接受的。Acceptable 意味着字符串作为最终结果是可以接受的。我们可以说,在输入Acceptable 字符串的过程中,任何字符串都是可信的中间状态,都是Intermediate 。
下面是一些例子:
- 对于接受 10 到 1000 整数的行编辑器,42 和 123 是Acceptable ,空字符串、5 或 1234 是Intermediate ,"asdf "和 10114 是Invalid 。
- 对于接受 URL 的可编辑组合框,任何格式正确的 URL 都是Acceptable ,"http://example.com/"是Intermediate (可能是剪切和粘贴操作不小心在末尾添加了逗号),空字符串是Intermediate (用户可能会选择并删除所有文本以准备输入新的 URL),"http:///./"是Invalid 。
- 对于接受长度的旋转框,"11cm "和 "1in "是Acceptable ,"11 "和空字符串是Intermediate ,"http://example.com "和 "hour "是Invalid 。
fixup() 是为验证器提供的,它可以修复一些用户错误。默认实现什么也不做。QLineEdit例如,如果用户按下 Enter(或 Return)键,而内容当前无效,则"...... "将调用fixup() 函数。这样,fixup() 函数就有机会施展魔法,将Invalid 字符串变为Acceptable 。
验证器有一个 locale,可通过setLocale() 设置。它通常用于解析本地化数据。例如,QIntValidator 和QDoubleValidator 用它来解析整数和双数的本地化表示。
另请参阅 QIntValidator,QDoubleValidator,QRegularExpressionValidator和行编辑示例。
成员类型文档
enum QValidator::State
该枚举类型定义了验证字符串可能存在的状态。
常量 | 值 | 说明 |
---|---|---|
QValidator::Invalid | 0 | 字符串明显无效。 |
QValidator::Intermediate | 1 | 字符串是一个可信的中间值。 |
QValidator::Acceptable | 2 | 字符串作为最终结果是可以接受的,即它是有效的。 |
成员函数文档
[explicit]
QValidator::QValidator(QObject *parent = nullptr)
设置验证器。parent 参数将传递给QObject 构造函数。
[virtual noexcept]
QValidator::~QValidator()
销毁验证器,释放已使用的存储空间和其他资源。
[signal]
void QValidator::changed()
当任何可能影响字符串有效性的属性发生变化时,就会发出该信号。
[virtual]
void QValidator::fixup(QString &input) const
该函数试图根据该验证器的规则将input 变为有效字符串。它不一定会产生有效字符串:调用此函数的用户必须在调用后重新进行测试;默认情况下不做任何操作。
即使不生成有效字符串,重新实现该函数也可更改input 。例如,ISBN 验证器可能希望删除除数字和"-"之外的所有字符,即使结果仍然不是有效的 ISBN;姓氏验证器可能希望删除字符串开头和结尾的空白,即使结果字符串不在可接受的姓氏列表中。
QLocale QValidator::locale() const
返回验证器的语言版本。默认情况下,locale 初始化为与 QLocale() 相同的值。
另请参阅 setLocale() 和QLocale::QLocale()。
void QValidator::setLocale(const QLocale &locale)
设置验证器将使用的locale 。除非调用了 setLocale,否则验证器将使用通过QLocale::setDefault() 设置的默认语言。如果未设置默认语言,则使用操作系统的语言。
另请参阅 locale() 和QLocale::setDefault()。
[pure virtual]
QValidator::State QValidator::validate(QString &input, int &pos) const
如果input 根据本验证器的规则无效,则此虚函数返回Invalid ;如果稍加编辑即可接受输入(例如,用户在可接受 10 到 99 之间整数的 widget 中输入 "4"),则此函数返回Intermediate ;如果输入有效,则此函数返回Acceptable 。
如果需要,函数可以同时更改input 和pos (光标位置)。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.