QSpinBox
validate
には、基本クラスから継承されたメソッドの独自の実装がありQAbstractSpinBox
ます。を使用するなどして、このメソッドの動作をカスタマイズする場合は、サブクラスでメソッドをサブクラス化し、それに応じて再実装QIntValidator
する必要があります。QSpinBox
validate
あなたが必要とするロジック - 「他の特定の整数で割り切れる数のみを許可する」 - は、QIntValidator
の機能の範囲を超えています。指定された文字列を指定された範囲内で整数に変換できるかどうか、または指定された文字列をそのような整数に変換できるように拡張できるかどうか (Intermediate
状態) を指定するだけです。
サブクラスのメソッド実装QIntValidator
内でプリプロセッサとして使用できると思います。最初に呼び出し、状態を返す場合はメソッドもそうします。ただし、またはが返された場合は、自分で続行する必要があります。QSpinBox
validate
QIntValidator::validate
Invalid
Intermediate
Acceptable
- 入力文字列を取り、それを整数に変換してみてください - おそらく
QString::toInt
十分でしょう。
- 受信した整数を見て、それが他の特定の整数で割り切れるかどうかを判断する独自のロジックをエンコードします。はいの場合、メソッドは
Acceptable
状態を返します。そうでない場合は、この整数を「拡張」して受け入れられるようにすることができるかどうかをどうにかして把握する必要があります。たとえば、数値の長さは 2 ~ 4 文字であるとします。これは、少なくとも 1、2、および 3 桁の整数のサブセットを拡張して許容できるようにすることができることを意味します。処理された整数がそのようなサブセットに属している場合、メソッドは を返しIntermediate
、そうでない場合は を返しInvalid
ます。
最小値/最大値について:とメソッドは、入力のチェックに使用する範囲を定義しQSpinBox
ます。サブクラスのメソッドの先頭で使用するという私の提案に従う場合は、これらの最小値と最大値をそれぞれの下部と上部のプロパティに設定する必要があります。setMinimum
setMaximum
QSpinBox::validate
QIntValidator
validate
QSpinBox
QIntValidator
class MySpinBox: public QSpinBox
{
<...>
};
QValidator::State MySpinBox::validate(QString &text, int &pos) const
{
QIntValidator validator;
validator.setBottom(minimum());
validator.setTop(maximum());
QValidator::State state = validator.validate(text, pos);
if (state == QValidator::Invalid) {
return state;
}
<...> // Otherwise proceed with your own logics
}