Russian Qt Forum

Qt => Общие вопросы => Тема начата: Germiona от Май 21, 2008, 13:01



Название: Проверка ввода - валидатор
Отправлено: Germiona от Май 21, 2008, 13:01
Доброго времени суток  :)

Господа,может кто-нибудь уже создавал проверку ввода (валидатор) на IP адрес в строке ввода LineEdit ::) Маску то легко установить,а вот проверять диапазон от 0 до 255....

Поделитесь,плиз...


Название: Re: Проверка ввода - валидатор
Отправлено: em от Май 21, 2008, 14:49
хм в Qt знак отмены \ не понимается почему-то... тогда получается не отменишь специальное значение для точки (типа \.)!


Название: Re: Проверка ввода - валидатор
Отправлено: lit-uriy от Май 21, 2008, 14:55
не в Qt, а в Си, пиши так: \\.


Название: Re: Проверка ввода - валидатор
Отправлено: uriel от Май 21, 2008, 15:14
Можно через QRegExpValidator с выражением "\\b(([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\b".


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Май 21, 2008, 15:21
Спасибо большое  :) Попробую


Название: Re: Проверка ввода - валидатор
Отправлено: em от Май 21, 2008, 16:00
не в Qt, а в Си, пиши так: \\.
Ах точно =)))

Можно через QRegExpValidator с выражением "\\b(([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\b".
ага работает)


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Май 29, 2008, 16:27
Цитировать
Можно через QRegExpValidator с выражением "\\b(([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\b".

Хм....а почему валидатор с этим отображением не хочет работать вместе с маской?

Код:
setInputMask("000.000.000.000;_");

Нельзя что ли одновременно и маску и валидатор использовать? хотелось бы чтобы разделительные точки не стирались и не удалялись


Название: Re: Проверка ввода - валидатор
Отправлено: uriel от Май 29, 2008, 17:54
В ассистенте написано:
Код:
To get range control (e.g. for an IP address) use masks together with validators.
Так что в идеале должно работать...


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Май 30, 2008, 09:45
Цитировать
В ассистенте написано:
Код:

To get range control (e.g. for an IP address) use masks together with validators.

Так что в идеале должно работать...

Это я тоже читала...однако не работает  :(
Выражение QRegExpValidator-а другим каким-то должно быть,если установлена уже маска вида: ___.___.___.___ ???


Название: Re: Проверка ввода - валидатор
Отправлено: BRE от Май 30, 2008, 09:53
Цитировать
В ассистенте написано:
Код:

To get range control (e.g. for an IP address) use masks together with validators.

Так что в идеале должно работать...

Это я тоже читала...однако не работает  :(
Выражение QRegExpValidator-а другим каким-то должно быть,если установлена уже маска вида: ___.___.___.___ ???
Попробуй маску установить не с подчеркиваниями, а с нулями например. ИМХО маска по валидатору не валидная.


Название: Re: Проверка ввода - валидатор
Отправлено: chipset от Май 30, 2008, 10:15
Что то вроде такого
QRegExp regIp("[0-9]{,3}\\.[0-9{,3}\\.[0-9]{,3}\\.[0-9]{,3}]");


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Май 30, 2008, 10:43
Ничего не получаеца (((((((

Даже если устанавливаю валидатор на любой символ при установленной маске (даже только с нулями,без пробелов) ни один символ не вводиться  :-\ Придеться без маски  :'(


Название: Re: Проверка ввода - валидатор
Отправлено: BRE от Май 30, 2008, 11:07
Ничего не получаеца (((((((

Даже если устанавливаю валидатор на любой символ при установленной маске (даже только с нулями,без пробелов) ни один символ не вводиться  :-\ Придеться без маски  :'(

А у меня все работает.  ;)
Код:
QLineEdit *m_ip = ...;
m_ip->setInputMask( "000.000.000.000;0" );
QRegExp rx( "\\b(([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\b" );
m_ip->setValidator( new QRegExpValidator( rx, this ) );


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Май 30, 2008, 13:21
Пишу один в один....но не работает


Название: Re: Проверка ввода - валидатор
Отправлено: lit-uriy от Май 30, 2008, 14:34
может в Qt3.x это как-то иначе?


Название: Re: Проверка ввода - валидатор
Отправлено: Germiona от Июнь 06, 2008, 13:50
Ура! Получилось! Просто маску надо было устанавливать в конструкторе,а не в свойствах формы QT Designer-a


А вот еще такой вопрос по поводу RegExp...
Как будет выглядеть выражение для имени файла? т.е. любые буквы,цифры,_,- и точка, но после точки,чтобы только 3 символа разрешал...

Код:
regExp("[a-zA-Z0-9_-]");

а как быть с точкой?


Название: Re: Проверка ввода - валидатор
Отправлено: uriel от Июнь 06, 2008, 14:29
Возможно, так. :)
Код:
[\\w-_]*[.][\\w]{,3}


Название: Re: Проверка ввода - валидатор
Отправлено: Sergeich от Июнь 06, 2008, 14:44
Ура! Получилось! Просто маску надо было устанавливать в конструкторе,а не в свойствах формы QT Designer-a


А вот еще такой вопрос по поводу RegExp...
Как будет выглядеть выражение для имени файла? т.е. любые буквы,цифры,_,- и точка, но после точки,чтобы только 3 символа разрешал...

Код:
regExp("[a-zA-Z0-9_-]");

а как быть с точкой?
Не советую ставить ограничение на кол-во символов после точки, даже в винде сейчас используется больше символов (например xlsx и docx). Лучше юзать QFileDialog c установкой фильтра


Название: Re: Проверка ввода - валидатор
Отправлено: cooler_3105 от Июнь 16, 2008, 14:39
1. Как сделать проверку ввода в TextEdit? (альтернатива валидатора в LineEdit)
2. Как перейти на новую строчку при записи файла? (не в тему, но для нубов темы нет)
Извините за глупые вопросы... Только начинаю изучать QT.


Название: Re: Проверка ввода - валидатор
Отправлено: ches01 от Апрель 12, 2012, 11:30


А у меня все работает.  ;)
Код:
QLineEdit *m_ip = ...;
m_ip->setInputMask( "000.000.000.000;0" );
QRegExp rx( "\\b(([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\b" );
m_ip->setValidator( new QRegExpValidator( rx, this ) );



Но не совсем правильно))) Первый символ должен быть отличным от нулевого)))ИМХО)))