2015-05-12 29 views
0

我想,以迫使用户使用QRegExpValidator: - 类型中的值只从一定范围内(双型), - 双型应在使用点不昏迷 键入 - 无其他格式允许QRegExpValidator最大值

到目前为止,我有:

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

这个验证势力用户在只有双值与点式。然而,我不知道如何防止用户输入值超出范围(例如范围从0到100.0)。我会帮助所有人。

回答

0

你可以编写自己的验证器,来自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; 
} 
+0

我不不知道该怎么做,你介意展示一些代码示例吗? – Bremen

+0

已更新的答案。 – Amartel

+0

谢谢。你的答案几乎是那个。我尝试了一下它真正应该的工作,但我没有成功。问题在于MyValidator方法。例如,假设min是5,max是9.在我写入(例如lineEdit)编号为1之后,我不能退格,因为它被认为是无效的。另一方面,如果我改变第一个表达式来返回Intermediate,我将能够接受数字1 ...如何克服这个问题? – Bremen