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() 必须由每个子类实现。它根据参数是否有效(依据子类对“有效”的定义),返回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 。
验证器具有一个区域设置,可通过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
返回验证器的区域设置。该区域设置默认初始化为与 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 之间整数的控件中输入了“4”),则返回Intermediate ;如果输入有效,则返回Acceptable 。
该函数可在必要时同时修改input 和pos (光标位置)。
© 2026 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.