Класс 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 |
Открытые типы
| перечисление | 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 в зависимости от того, является ли его аргумент допустимым (согласно определению подкласса).
Эти три состояния требуют некоторого пояснения. Строка Invalid очевидно недопустима. Intermediate менее очевиден: концепция допустимости трудно применима, когда строка неполна (ещё редактируется). QValidator определяет Intermediate как свойство строки, которая ни явно не недопустима, ни приемлема в качестве окончательного результата. Acceptable означает, что строка приемлема в качестве окончательного результата. Можно сказать, что любая строка, которая является вероятным промежуточным состоянием во время ввода строки Acceptable, является Intermediate.
Вот несколько примеров:
- Для поля ввода, принимающего целые числа от 10 до 1000 включительно, 42 и 123 являются Acceptable, пустая строка и 5 являются Intermediate, а «asdf» и 1114 являются Invalid.
- Для редактируемого выпадающего списка, принимающего URL-адреса, любой правильно сформированный URL-адрес является Acceptable, «http://example.com/» является Intermediate (возможно, это действие копирования и вставки, которое случайно добавило запятую в конце), пустая строка является Intermediate (пользователь может выбрать и удалить весь текст, готовясь ввести новый URL-адрес), а «http:///./» является Invalid.
- Для поля Spin Box, принимающего длины, «11см» и «1дюйм» являются Acceptable, «11» и пустая строка являются Intermediate, а «http://example.com» и «час» являются Invalid.
fixup() предоставляется для валидаторов, которые могут исправить некоторые ошибки пользователя. По умолчанию реализация ничего не делает. QLineEdit, например, вызовет fixup(), если пользователь нажмёт Enter, а содержимое в настоящее время недействительно. Это даёт функции fixup() возможность выполнить некоторую магию, чтобы сделать строку Invalid Acceptable.
Валидатор имеет локаль, установленную с помощью setLocale(). Она обычно используется для парсинга данных с локализованной записью. Например, QIntValidator и QDoubleValidator используют её для парсинга локализованных представлений целых чисел и вещественных чисел.
QValidator обычно используется с QLineEdit, QSpinBox и QComboBox.
См. также QIntValidator, QDoubleValidator, QRegularExpressionValidator и Пример полей ввода.
Документация по типам членов
перечисление QValidator::State
Это перечисление определяет состояния, в которых может находиться валидируемая строка.
| Постоянная | Значение | Описание |
|---|---|---|
QValidator::Invalid |
0 |
Строка очевидно недопустима. |
QValidator::Intermediate |
1 |
Строка является вероятным промежуточным значением. |
QValidator::Acceptable |
2 |
Строка приемлема в качестве окончательного результата; т.е. она допустима. |
Документация по функциям-членам
QValidator::QValidator(QObject *parent = nullptr)
Инициализирует валидатор. Параметр parent передаётся конструктору QObject.
[signal] void QValidator::changed()
Этот сигнал излучается, когда любое свойство, которое может повлиять на валидность строки, изменилось.
[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
Эта виртуальная функция возвращает Invalid, если input недопустима согласно правилам валидатора, Intermediate, если есть вероятность, что небольшая правка сделает вход приемлемым (например, пользователь вводит «4» в поле, которое принимает целые числа от 10 до 99), и Acceptable, если вход допустим.
Функция может изменить как input, так и pos (позицию курсора), если необходимо.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qvalidator.html