Russian Qt Forum

Qt => Общие вопросы => Тема начата: dr_Begemot от Март 18, 2010, 10:10



Название: QValidator & QTime
Отправлено: dr_Begemot от Март 18, 2010, 10:10
Нужно сделать QValidator, который бы позволял вводить QTime.
Формат такой: hh:mm:ss.z


Название: Re: QValidator & QTime
Отправлено: alexman от Март 18, 2010, 10:25
QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )


Название: Re: QValidator & QTime
Отправлено: dr_Begemot от Март 18, 2010, 10:55
QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Спасибо)
А как ввести необязательный параметр?
Типа в начале может быть +, - или ничего


Название: Re: QValidator & QTime
Отправлено: dr_Begemot от Март 18, 2010, 11:06
QRegExp( "([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]" )

Что-то не так с точкой, вместо нее вводится любой символ...


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


Название: Re: QValidator & QTime
Отправлено: alexman от Март 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]" )


Название: Re: QValidator & QTime
Отправлено: dr_Begemot от Март 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]


Название: Re: QValidator & QTime
Отправлено: alexman от Март 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])


Название: Re: QValidator & QTime
Отправлено: alexman от Март 18, 2010, 13:15
Проблема в том, что editingFinished() у QLineEdit вызывается только после того, как введешь все числа, а формат hh:mm:ss.z, означает [00-23]:[00-59]:[00-59].[0-999]
Не понял мысль?


Название: Re: QValidator & QTime
Отправлено: dr_Begemot от Март 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]|)"
прекрасно работает, но обязывает вводить данные полностью.

В чем ошибка?


Название: Re: QValidator & QTime
Отправлено: alexman от Март 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]|))))


Название: Re: QValidator & QTime
Отправлено: dr_Begemot от Март 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]|))))

Заработало! спасибо) И, кстати, + и - надо оформлять в []-скобки, ну или два слеша ставить)


Название: Re: QValidator & QTime
Отправлено: alexman от Март 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]|))))

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