QValidator 类

QValidator 类提供输入文本的验证。 更多信息...

头文件 #include <QValidator>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承自 QObject
继承自

QDoubleValidatorQIntValidatorQRegularExpressionValidator

公共类型

枚举State { Invalid, Intermediate, Acceptable }

公共函数

QValidator(QObject *parent = nullptr)
虚拟~QValidator()
虚拟 voidfixup(QString &input) const
QLocalelocale() const
voidsetLocale(const QLocale &locale)
虚拟 QValidator::Statevalidate(QString &input, int &pos) const = 0

信号

voidchanged()

详细描述

该类本身是抽象的。两个子类,QIntValidatorQDoubleValidator,提供基本的数值范围检查,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() 设置。它通常用于解析本地化数据。例如,QIntValidatorQDoubleValidator 使用它来解析整数和双精度数的本地化表示。

QValidator 通常与 QLineEditQSpinBoxQComboBox 一起使用。

另请参阅 QIntValidatorQDoubleValidatorQRegularExpressionValidator行编辑示例

成员类型文档

枚举 QValidator::State

此枚举类型定义了验证字符串可能存在的状态。

常量描述
QValidator::Invalid0字符串显然是无效的。
QValidator::Intermediate1字符串是可能的中间值。
QValidator::Acceptable2字符串可以作为最终结果接受;即它是有效的。

成员函数文档

[明确] 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

如果需要,该函数可以更改 inputpos(光标位置)。

© 2024 The Qt Company Ltd. 本文档中包含的贡献的版权属于其各自的所有者。所提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款授权的。Qt 和相关标志是 The Qt Company Ltd. 在芬兰及其它国家和地区的商标。所有其他商标均属于其各自所有者。