你可以编写自己的验证器,来自QValidator
。所有你需要的是实现virtual State validate(QString &input, int &pos) const = 0
。
UPDATE
实施例:
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;
}
我不不知道该怎么做,你介意展示一些代码示例吗? – Bremen
已更新的答案。 – Amartel
谢谢。你的答案几乎是那个。我尝试了一下它真正应该的工作,但我没有成功。问题在于MyValidator方法。例如,假设min是5,max是9.在我写入(例如lineEdit)编号为1之后,我不能退格,因为它被认为是无效的。另一方面,如果我改变第一个表达式来返回Intermediate,我将能够接受数字1 ...如何克服这个问题? – Bremen