QRegExpValidator 最大值

QRegExpValidator maximum value

我想使用 QRegExpValidator 来强制用户: - 仅输入一定范围内的值(双精度类型), - 应该使用点而不是逗号输入双精度类型 - 不允许使用其他格式

到目前为止我有:

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

此验证器强制用户仅输入带点的双精度值。但是我不知道如何防止用户输入超出范围的值(例如范围是 0 到 100.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;
}