0

ユーザーに次のことを強制するために、QRegExpValidator を使用したいと思います。

これまでのところ、私は持っています:

QRegExpValidator* rxv = new QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?"), this);

このバリデーターは、ユーザーにドット付きの double 値のみを入力するように強制します。ただし、ユーザーが範囲外の値を入力できないようにする方法はわかりません(たとえば、範囲は0から100.0になります)。私はすべての助けを借ります。

4

1 に答える 1

0

から派生した独自のバリデータを作成できますQValidator。必要なのは、実装することだけですvirtual State validate(QString &input, int &pos) const = 0

アップデート

例:

MyValidator.h :

class MyValidator : public QValidator
{
    Q_OBJECT
public:
    MyValidator(double min, double max, QObject *parent = 0);

    State validate(QString &input, int &pos) const;

private:
    QRegExp mRexp;
    double mMin;
    double mMax;
};

MyValidator.cpp :

MyValidator::MyValidator(double min, double max, QObject *parent) :
    QValidator(parent)
  , mRexp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")
  , mMin(min)
  , mMax(max)
{}

QValidator::State MyValidator::validate(QString &input, int &pos) const
{
    if (input.isEmpty())
        return Acceptable;
    if (!mRexp.exactMatch(input))
        return Invalid;
    const double val = input.toDouble();
    if (mMin <= val && val <= mMax)
        return Acceptable;
    return Intermediate;
}
于 2015-05-12T13:43:15.473 に答える