Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vladimir от Июль 24, 2012, 13:59



Название: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 13:59
Доброго дня! Вопрос не очень сложный, но что-то не могу догнать как разрешить ввод чисел из диапазона, скажем, от 0 до 90 с помощью регулярных выражений?! Подскажите плиз)


Название: Re: QRegExp
Отправлено: kambala от Июль 24, 2012, 14:19
предлагаю не заниматься извращениями и использовать QIntValidator


Название: Re: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 14:24
Да, не полностью пояснил! Нужно вводить не только int значения, а скажем и 00.000 до 59.999, причем именно столько знаков до и после "."


Название: Re: QRegExp
Отправлено: Пантер от Июль 24, 2012, 14:32
QDoubleValidator


Название: Re: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 14:37
Можно, но опять же с QDoubleValidator можно ввести любое double число, а нужно в конкретном формате "00.000" 2 знака до точки и 3 после!


Название: Re: QRegExp
Отправлено: Igors от Июль 24, 2012, 15:01
Можно, но опять же с QDoubleValidator можно ввести любое double число, а нужно в конкретном формате "00.000" 2 знака до точки и 3 после!
1) Пользователь ввел напр просто "2". Глуповато заставлять его вводить 02.000, да и как заставить?
2) Затравленный пользователь хочет ввести 15.000 но ведь набирать надо цифру за цифрой, пока набрал только "1" - что делать?

Читаем QDoubleValidator а не высовываемся с "нужно" не подумавши


Название: Re: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 15:34
а никто и не заставляет вводить дальше:
1) ввел 2 ну и пожалуйста 0 сами докинуться до 2.000 ! а вот если захотел ввести 91.555 или 100.555 этого быть не должно.
2) "хочет ввести 15.000" пусть вводит, но достаточно и 15 чтобы получить тоже самое с такой реализацией
"[0-9]{2}[.]{1}[0-9]{3}". Ввод осуществляется в диалоговом окне и пока не нажата кнопка ОК ничего делать не нужно! А если пользователь ввел 1 и нажал ОК, значит так и задумывалось и обработается это число корректно!

вопрос в том как сделать "[0-9]{2}[.] ..." от 0 до 90, а не до 99! И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)




Название: Re: QRegExp
Отправлено: kambala от Июль 24, 2012, 15:55
Код
C++ (Qt)
void MyClass::textChanged(const QString &text)
{
   double value = text.toDouble();
   buttonOk->setEnabled(value >= 0 && value <= 90);
}
...
connect(lineEdit, SIGNAL(textChanged(const QString &)), SLOT(textChanged(const QString &)));


Название: Re: QRegExp
Отправлено: Igors от Июль 24, 2012, 16:01
И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)
Ну спасибо за реверанс :) Просто Вы не первый кто считает что QDoubleValidator "не то" и упорно тыкает QRegExp. И даже не пятый или десятый.

Дело в том что при вводе флотов невалидные значения могут (временно) существовать/отображаться, и это правильно. Пример: пользователь ввел 31.4 (валидное значение) но оказывается надо было 3.14. Что ему делать если забить точку Вы не даете?

Конечно принимать невалидные значения не нужно, и QDoubleValidator это (удобно) делает.

вопрос в том как сделать "[0-9]{2}[.] ..." от 0 до 90, а не до 99!
А зачем этот ракообразный синтаксис, показатель "крутизнеы" что ли? Чем плохо незатейливое QString::toDouble и потом сравнение?


Название: Re: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 16:08
Код
C++ (Qt)
void MyClass::textChanged(const QString &text)
{
   double value = text.toDouble();
   buttonOk->setEnabled(value >= 0 && value <= 90);
}
...
connect(lineEdit, SIGNAL(textChanged(const QString &)), SLOT(textChanged(const QString &)));

Т.е. блокировать кнопку ОК, пока не введены корректные значения?! Ну как вариант.. спасибо!


Название: Re: QRegExp
Отправлено: Vladimir от Июль 24, 2012, 16:14
И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)
Ну спасибо за реверанс :) Просто Вы не первый кто считает что QDoubleValidator "не то" и упорно тыкает QRegExp. И даже не пятый или десятый.

Дело в том что при вводе флотов невалидные значения могут (временно) существовать/отображаться, и это правильно. Пример: пользователь ввел 31.4 (валидное значение) но оказывается надо было 3.14. Что ему делать если забить точку Вы не даете?

Конечно принимать невалидные значения не нужно, и QDoubleValidator это (удобно) делает.

вопрос в том как сделать "[0-9]{2}[.] ..." от 0 до 90, а не до 99!
А зачем этот ракообразный синтаксис, показатель "крутизнеы" что ли? Чем плохо незатейливое QString::toDouble и потом сравнение?

Решение казалось изначально несложным.. Казалось бы, что может быть проще, чем разрешить ввод чисел из заданного диапазона, но механизм QRegExp более мудренный, чем кажется на первый взгляд.. Тогда да, действительно нужно делать проще! Спасибо за ответы)


Название: Re: QRegExp
Отправлено: kambala от Июль 24, 2012, 16:16
Т.е. блокировать кнопку ОК, пока не введены корректные значения?! Ну как вариант.. спасибо!
да, это логично следует из предъявленных требований:
Ввод осуществляется в диалоговом окне и пока не нажата кнопка ОК ничего делать не нужно!


Название: Re: QRegExp
Отправлено: trot от Август 29, 2012, 13:43
90|[0-8]?[0-9]?\.?[0-9]?[0-9]?[0-9]?