2015-05-12 2 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.

ОБНОВЛЕНИЕ

Пример:

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. После того, как я напишу (например, в строкеEdit) номер 1, я больше не могу отступать, поскольку он обрабатывается как Invalid. С другой стороны, если я изменил первое выражение, чтобы вернуть Intermediate, я смогу принять номер 1 ... Как преодолеть это? – Bremen