Russian Qt Forum
Ноябрь 24, 2024, 19:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QRegExp  (Прочитано 9078 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Июль 24, 2012, 13:59 »

Доброго дня! Вопрос не очень сложный, но что-то не могу догнать как разрешить ввод чисел из диапазона, скажем, от 0 до 90 с помощью регулярных выражений?! Подскажите плиз)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июль 24, 2012, 14:19 »

предлагаю не заниматься извращениями и использовать QIntValidator
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Июль 24, 2012, 14:24 »

Да, не полностью пояснил! Нужно вводить не только int значения, а скажем и 00.000 до 59.999, причем именно столько знаков до и после "."
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 24, 2012, 14:32 »

QDoubleValidator
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #4 : Июль 24, 2012, 14:37 »

Можно, но опять же с QDoubleValidator можно ввести любое double число, а нужно в конкретном формате "00.000" 2 знака до точки и 3 после!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июль 24, 2012, 15:01 »

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

Читаем QDoubleValidator а не высовываемся с "нужно" не подумавши
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #6 : Июль 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! И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)


« Последнее редактирование: Июль 24, 2012, 15:41 от Vladimir » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Июль 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 &)));
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Июль 24, 2012, 16:01 »

И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)
Ну спасибо за реверанс Улыбающийся Просто Вы не первый кто считает что QDoubleValidator "не то" и упорно тыкает QRegExp. И даже не пятый или десятый.

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

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

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

Сообщений: 305



Просмотр профиля
« Ответ #9 : Июль 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 &)));

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

Сообщений: 305



Просмотр профиля
« Ответ #10 : Июль 24, 2012, 16:14 »

И то, что "нужно" лучше знать мне, а не Вам! А вот как это сделать скорее лучше знаете Вы =)
Ну спасибо за реверанс Улыбающийся Просто Вы не первый кто считает что QDoubleValidator "не то" и упорно тыкает QRegExp. И даже не пятый или десятый.

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

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

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

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Июль 24, 2012, 16:16 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
trot
Гость
« Ответ #12 : Август 29, 2012, 13:43 »

90|[0-8]?[0-9]?\.?[0-9]?[0-9]?[0-9]?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 23.