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() |
詳細な説明
このクラス自体は抽象クラスです。2つのサブクラス、QIntValidator およびQDoubleValidator は、基本的な数値範囲のチェック機能を提供し、QRegularExpressionValidator は、カスタム正規表現を使用した一般的なチェック機能を提供します。
組み込みのバリデータでは不十分な場合は、QValidator をサブクラス化することができます。このクラスには、validate() およびfixup() という 2 つの仮想関数があります。
validate()はすべてのサブクラスで実装する必要があります。この関数は、引数が有効かどうか(サブクラスで定義された「有効」の基準に基づいて)に応じて、Invalid 、Intermediate 、またはAcceptable を返します。
これら3つの状態については、若干の説明が必要です。「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 は、整数や倍精度浮動小数点のローカライズされた表現を解析するためにこれを使用します。
QValidatorは通常、QLineEdit 、QSpinBox 、およびQComboBox と組み合わせて使用されます。
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 を、少し編集すれば入力が有効になる可能性が高い場合はIntermediate を(例:10から99までの整数を受け付けるウィジェットにユーザーが「4」と入力した場合など)、入力が有効な場合は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.