Класс QValidator
Класс QValidator предоставляет валидацию входного текста. Подробнее...
| Заголовок: | #include <QValidator> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследует: | QObject |
| Наследуется: | QDoubleValidator, QIntValidator, и QRegularExpressionValidator |
Общедоступные типы
| перечисление | Состояние { Некорректно, Промежуточное, Корректно } |
Общедоступные функции
| 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 | изменился() |
Подробное описание
Сам класс является абстрактным. Два подкласса, QIntValidator и QDoubleValidator, обеспечивают проверку диапазона числовых значений, а QRegularExpressionValidator предоставляет общую проверку с использованием пользовательского регулярного выражения.
Если встроенные валидаторы недостаточно функциональны, можно создать подкласс QValidator. У класса есть две виртуальные функции: validate() и fixup().
validate() должна быть реализована каждым подклассом. Она возвращает Некорректно, Промежуточное или Корректно в зависимости от того, является ли аргумент допустимым (для определения подкласса).
Эти три состояния требуют некоторого объяснения. Строка Некорректно явным образом некорректна. Промежуточное менее очевидно: понятие корректности трудно применить, когда строка неполна (ещё редактируется). QValidator определяет Промежуточное как свойство строки, которая не является явно некорректной и не приемлемой в качестве окончательного результата. Корректно означает, что строка приемлема в качестве окончательного результата. Можно сказать, что любая строка, являющаяся вероятным промежуточным состоянием во время ввода строки Корректно, является Промежуточным.
Вот несколько примеров:
- Для поля ввода, которое принимает целые числа от 10 до 1000 включительно, 42 и 123 являются Корректно, пустая строка и 5 являются Промежуточным, а "asdf" и 1114 являются Некорректно.
- Для изменяемого выпадающего списка, который принимает URL-адреса, любой правильно сформированный URL-адрес является Корректно, "http://example.com/," является Промежуточным (это может быть действие вырезания и вставки, которое случайно взяло запятую в конце), пустая строка является Промежуточным (пользователь может выделить и удалить весь текст в подготовке к вводу нового URL-адреса), а "http:///./" является Некорректно.
- Для поля ввода с шагом, которое принимает длины, "11см" и "1дюйм" являются Корректно, "11" и пустая строка являются Промежуточным, а "http://example.com" и "час" являются Некорректно.
fixup() предоставляется для валидаторов, которые могут исправить некоторые ошибки пользователя. По умолчанию реализация ничего не делает. QLineEdit, например, вызовет fixup(), если пользователь нажмёт Enter (или Возврат), а содержимое в настоящее время некорректно. Это позволяет функции fixup() осуществить некоторую магию, чтобы сделать строку Некорректно Корректно.
Валидатор имеет локаль, устанавливаемую с помощью setLocale(). Он обычно используется для анализа локализованных данных. Например, QIntValidator и QDoubleValidator используют его для анализа локализованных представлений целых чисел и чисел с плавающей точкой.
QValidator обычно используется с QLineEdit, QSpinBox и QComboBox.
См. также QIntValidator, QDoubleValidator, QRegularExpressionValidator и Пример полей ввода.
Документация по типам членов
перечисление QValidator::Состояние
Этот тип перечисления определяет состояния, в которых может находиться валидированная строка.
| Постоянная | Значение | Описание |
|---|---|---|
QValidator::Invalid |
0 |
Строка явным образом некорректна. |
QValidator::Intermediate |
1 |
Строка — это вероятное промежуточное значение. |
QValidator::Acceptable |
2 |
Строка приемлема в качестве окончательного результата; т. е. она корректна. |
Документация по функциям-членам
QValidator::QValidator(QObject *parent = nullptr)
Инициализирует валидатор. Параметр parent передаётся в конструктор QObject.
[signal] void QValidator::изменился()
Этот сигнал испускается, когда изменяется любой атрибут, который может повлиять на корректность строки.
[virtual] QValidator::~QValidator()
Удаляет валидатор, освобождая используемые ресурсы.
[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 некорректно согласно правилам валидации этого валидатора, Промежуточное, если вероятно, что небольшое редактирование сделает ввод допустимым (например, пользователь вводит "4" в виджет, который принимает целые числа от 10 до 99), и Корректно, если ввод корректен.
Функция может изменить как input, так и pos (позицию курсора) при необходимости.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qvalidator.html