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;
}
我想使用 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;
}