我想使用QRegExpValidator强制用户: - 仅从特定范围输入值(双重类型), - 双击类型应使用点而不是昏迷键入 - 不允许其他格式
到目前为止,我有:
QRegExpValidator* rxv = new QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?"), this);
此验证器强制用户仅使用点键入双值。我不知道如何防止用户输入超出范围的值(例如范围从0到100.0)。我会帮助所有人。
答案 0 :(得分: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;
}