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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QValidator & QTime  (Прочитано 5993 раз)
dr_Begemot
Гость
« : Март 18, 2010, 10:10 »

Нужно сделать QValidator, который бы позволял вводить QTime.
Формат такой: hh:mm:ss.z
Записан
alexman
Гость
« Ответ #1 : Март 18, 2010, 10:25 »

QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )
Записан
dr_Begemot
Гость
« Ответ #2 : Март 18, 2010, 10:55 »

QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Спасибо)
А как ввести необязательный параметр?
Типа в начале может быть +, - или ничего
Записан
dr_Begemot
Гость
« Ответ #3 : Март 18, 2010, 11:06 »

QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Что-то не так с точкой, вместо нее вводится любой символ...
Записан
alexman
Гость
« Ответ #4 : Март 18, 2010, 11:18 »

А как ввести необязательный параметр?
Типа в начале может быть +, - или ничего
Код:
QRegExp( "(+|-|)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )
Записан
alexman
Гость
« Ответ #5 : Март 18, 2010, 11:30 »

QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Что-то не так с точкой, вместо нее вводится любой символ...
Вроде так должно работать:
Код:
QRegExp( "(+|-|)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]" )
Записан
dr_Begemot
Гость
« Ответ #6 : Март 18, 2010, 12:57 »

QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Что-то не так с точкой, вместо нее вводится любой символ...
Вроде так должно работать:
Код:
QRegExp( "(+|-|)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]" )

Спасибо)
А как указать, что могут быть 1,2 или 3 числа, этот вариант как-то не элегантен...
([0-9][0-9][0-9])|([0-9][0-9])|([0-9])

upd - Не работает ([0-9][0-9][0-9])|([0-9][0-9])|([0-9])

Проблема в том, что editingFinished() у QLineEdit вызывается только после того, как введешь все числа, а формат hh:mm:ss.z, означает [00-23]:[00-59]:[00-59].[0-999]
« Последнее редактирование: Март 18, 2010, 13:05 от dr_Begemot » Записан
alexman
Гость
« Ответ #7 : Март 18, 2010, 13:09 »

upd - Не работает ([0-9][0-9][0-9])|([0-9][0-9])|([0-9])
Смотри внимательнее!
Код:
([0-9][0-9][0-9]|[0-9][0-9]|[0-9])
Записан
alexman
Гость
« Ответ #8 : Март 18, 2010, 13:15 »

Проблема в том, что editingFinished() у QLineEdit вызывается только после того, как введешь все числа, а формат hh:mm:ss.z, означает [00-23]:[00-59]:[00-59].[0-999]
Не понял мысль?
Записан
dr_Begemot
Гость
« Ответ #9 : Март 18, 2010, 14:49 »

upd - Не работает ([0-9][0-9][0-9])|([0-9][0-9])|([0-9])
Смотри внимательнее!
Код:
([0-9][0-9][0-9]|[0-9][0-9]|[0-9])

Возможно я немного загнался) но вот я составил такое регулярное выражение:

Код:
#define MY_REG_EXP \
"( ([+]|[-]|)([0-1][0-9]|[2][0-3]|[0-9]) ) |" \
"( ([+]|[-]|)([0-1][0-9]|[2][0-3]|[0-9]) : ([0-5][0-9]|[0-9]|) ) | " \
"( ([+]|[-]|)([0-1][0-9]|[2][0-3]|[0-9]) : ([0-5][0-9]|[0-9]) : ([0-5][0-9]|[0-9]|) ) |" \
"( ([+]|[-]|)([0-1][0-9]|[2][0-3]|[0-9]) : ([0-5][0-9]|[0-9]) : ([0-5][0-9]|[0-9]) \\. ([0-9][0-9][0-9]|[0-9][0-9]|[0-9]|) )" \

Но он почему-то не работает... смысл в том, чтобы позволять вводить данные в следующем формате:
Код:
[+/-/ничего] [число от 0-23]
[+/-/ничего] [число от 0-23] : [число от 0-59 или ничего]
[+/-/ничего] [число от 0-23] : [число от 0-59] : [число от 0-59 или ничего]
[+/-/ничего] [число от 0-23] : [число от 0-59] : [число от 0-59] . [число от 0-999 или ничего]

В данном случае идея в том, чтобы позволять вводить данные не до конца, считая не введенные данные по умолчанию равными нулю.
Выражение
Код:
"([+]|[-]|)([0-1][0-9]|[2][0-3]|[0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])\\.([0-9][0-9][0-9]|[0-9][0-9]|[0-9]|)"
прекрасно работает, но обязывает вводить данные полностью.

В чем ошибка?
« Последнее редактирование: Март 18, 2010, 14:51 от dr_Begemot » Записан
alexman
Гость
« Ответ #10 : Март 18, 2010, 15:19 »

(+|-|)([0-1][0-9]|[2][0-3]|[0-9])(|:([0-5][0-9]|[0-9])(|:([0-5][0-9]|[0-9])(|\\.([0-9][0-9][0-9]|[0-9][0-9]|[0-9]|))))
Записан
dr_Begemot
Гость
« Ответ #11 : Март 19, 2010, 09:23 »

(+|-|)([0-1][0-9]|[2][0-3]|[0-9])(|:([0-5][0-9]|[0-9])(|:([0-5][0-9]|[0-9])(|\\.([0-9][0-9][0-9]|[0-9][0-9]|[0-9]|))))

Заработало! спасибо) И, кстати, + и - надо оформлять в []-скобки, ну или два слеша ставить)
Записан
alexman
Гость
« Ответ #12 : Март 19, 2010, 09:41 »

(+|-|)([0-1][0-9]|[2][0-3]|[0-9])(|:([0-5][0-9]|[0-9])(|:([0-5][0-9]|[0-9])(|\\.([0-9][0-9][0-9]|[0-9][0-9]|[0-9]|))))

Заработало! спасибо) И, кстати, + и - надо оформлять в []-скобки, ну или два слеша ставить)
Спасибо! Я уже заметил это!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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