Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Larry от Сентября 21, 2011, 10:44



Название: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 10:44
Доброе утро, форумчане! Дайте пожалуйста совет, как лучше сделать. Необходимо сделать окно для ввода Ip-адреса, как в свойствах Протокол Интернета. Правильно ли будет наследоваться от QLineEdit или надо как-то по другому? Заранее спасибо...


Название: Re: Нестандартный QLineEdit
Отправлено: Пантер от Сентября 21, 2011, 10:55
Посмотри про QValidator.


Название: Re: Нестандартный QLineEdit
Отправлено: BRE от Сентября 21, 2011, 11:00
Посмотри про QValidator.
и на QLineEdit::setInputMask()


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 11:03
спасибо, сейчас посмотрю:)


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 11:22
Посмотри про QValidator.
и на QLineEdit::setInputMask()
Вид будет отличаться от картинки.


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 11:23
не страшно, если не понравится, то буду искать другой выход :)


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 11:32
использовал вариант с
Код:
setInputMask("000.000.000.000;_");
И еще вопрос, как центрировать курсор внутри маски?


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 11:34
Еще валидатор воткни, чтобы только корректные значения вводились.


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 11:39
спасибо, воткну, без него никуда:)


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 12:12
добавил валидатор и теперь не хочет работать
Код:
m_leIP->setValidator(new QIntValidator(0, 255, m_leIP);


Название: Re: Нестандартный QLineEdit
Отправлено: Пантер от Сентября 21, 2011, 12:13
Какой же это QIntValidator?


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 14:09
Тут надо QRegExpValidator на всю строку устанавливать (учитывать точки, первый символ [0-2], ...).


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 14:25
спасибо, до этого никогда с ними не работал. Попробую написать регулярное выражение...


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 14:44
Вот и повод появился разобраться :)


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 14:58
Код:
m_leStrIP->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" );
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), m_leStrIP);
m_leStrIP->setValidator(validator);

Вот что получилось, но при этом новая проблема возникла:
Код:
m_leStrIP->text();
выдает, н-р 11.11.2.1, если было введено 110.101.200.001, т.е. глотает все нули. Как исправить?


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 15:25
Попробуй этот вариант:
Код:
"(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])"


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 15:53
тоже самое, нули отсекаются....


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 16:07
Попробуй m_leStrIP->setInputMask("000.000.000.000;");
?


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 16:11
так работает:)...тогда еще вопрос, как в QLineEdit сделать размер окна по размеру текста?


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 16:33
Туплю что-то, по последнему пункту уже сделал...спасибо большое всем откликнувшимся:)


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 21, 2011, 16:51
Код:
m_leStrIP->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" );
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), m_leStrIP);
m_leStrIP->setValidator(validator);

Вот что получилось, но при этом новая проблема возникла:
Код:
m_leStrIP->text();
выдает, н-р 11.11.2.1, если было введено 110.101.200.001, т.е. глотает все нули. Как исправить?
От лукавого эти маски)

У меня маска одновременно с валидатором не работает. Как только добавляю маску валидатор перестает работать.
и я могу вводить 999.999.999.999 например. А мой валидатор позволяет только 255.255.255.255.
Хотя в ассистенте написано, что должны работать одновременно.
Почему так?


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 21, 2011, 17:36
Ну у Larry же работает!


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 17:41
у меня работает, только если задать маску вида 000.000.000.000; в остальных случаях нет:)


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 21, 2011, 17:45
у меня работает, только если задать маску вида 000.000.000.000; в остальных случаях нет:)
какой ты регэксп использовал в итоге?

Дай целиком кусок кода.


Название: Re: Нестандартный QLineEdit
Отправлено: Larry от Сентября 21, 2011, 17:54
у меня работает, только если задать маску вида 000.000.000.000; в остальных случаях нет:)
какой ты регэксп использовал в итоге?

Дай целиком кусок кода.
Код:
QRegExp rx( "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])" );
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), m_leStrInIP);
m_leStrInIP->setValidator(validator);


Название: Re: Нестандартный QLineEdit
Отправлено: kambala от Сентября 21, 2011, 18:34
точку надо через \\.

а вообще страшновато выглядит :) можно хотя бы одинаковую часть вынести в отдельную переменную.


Название: Re: Нестандартный QLineEdit
Отправлено: FalconHAM от Сентября 22, 2011, 09:07
А если так?
   
Код:
QRegExp re("([0-2]?[0-5]?[0-5]\\.){3}[0-2]?[0-5]?[0-5]");


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 22, 2011, 09:36
у меня работает, только если задать маску вида 000.000.000.000; в остальных случаях нет:)
какой ты регэксп использовал в итоге?

Дай целиком кусок кода.
Код:
QRegExp rx( "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
  "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])" );
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), m_leStrInIP);
m_leStrInIP->setValidator(validator);

Жестокий регэксп)
Ну так, а где установка маски? Я то говорил об одновременном использовании маски и валидатора.


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 22, 2011, 09:41
у меня работает, только если задать маску вида 000.000.000.000; в остальных случаях нет:)
какой ты регэксп использовал в итоге?

Дай целиком кусок кода.
Код:
QRegExp rx( "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
 "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
 "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
 "(   |[0-9]  | [0-9] |  [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])" );
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), m_leStrInIP);
m_leStrInIP->setValidator(validator);

Жестокий регэксп)
Ну так, а где установка маски? Я то говорил об одновременном использовании маски и валидатора.
Читай внимательнее выше по тексту. Маска тоже устанавливается. Регэксп написан в спешке (если надо элегантнее, то допили).

Кстати ничего жесткого нет: Ctrl+C, далее Ctrl+V 3 раза :)


Название: Re: Нестандартный QLineEdit
Отправлено: Пантер от Сентября 22, 2011, 09:43
Еще раз кину ссылку http://www.pcre.ru/eval/ (http://www.pcre.ru/eval/). Там можно тестить регекспы.


Название: Re: Нестандартный QLineEdit
Отправлено: kambala от Сентября 22, 2011, 11:36
http://www.regular-expressions.info/regexbuddy/ipaccurate.html вот ещё кстати


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 22, 2011, 13:38

Ну так, а где установка маски? Я то говорил об одновременном использовании маски и валидатора.
Читай внимательнее выше по тексту. Маска тоже устанавливается. Регэксп написан в спешке (если надо элегантнее, то допили).
Я же говорил о совместной работе, просил кусок, где одновременно задается маска и регэксп.
Я этого куска не вижу.
Кстати ничего жесткого нет: Ctrl+C, далее Ctrl+V 3 раза :)
Ну да, ну да. Нормально.
Можно было еще так: 001.001.001.001|001.001.001.002|001.001.001.003|...
"Один, один, один, один... Алло, Лоис?... Черт. Один, один, один, два... Алло, Лоис?... Черт". Стьюи Гриффин


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 22, 2011, 13:48

Ну так, а где установка маски? Я то говорил об одновременном использовании маски и валидатора.
Читай внимательнее выше по тексту. Маска тоже устанавливается. Регэксп написан в спешке (если надо элегантнее, то допили).
Я же говорил о совместной работе, просил кусок, где одновременно задается маска и регэксп.
Я этого куска не вижу.
Кстати ничего жесткого нет: Ctrl+C, далее Ctrl+V 3 раза :)
Ну да, ну да. Нормально.
Можно было еще так: 001.001.001.001|001.001.001.002|001.001.001.003|...
"Один, один, один, один... Алло, Лоис?... Черт. Один, один, один, два... Алло, Лоис?... Черт". Стьюи Гриффин

andrew.k, до**ся не до чего? Написал же:
Цитировать
Регэксп написан в спешке

Вот установка маски:
Цитировать
Код:
 m_leStrIP->setInputMask("000.000.000.000;");


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 22, 2011, 13:57

Ну так, а где установка маски? Я то говорил об одновременном использовании маски и валидатора.
Читай внимательнее выше по тексту. Маска тоже устанавливается. Регэксп написан в спешке (если надо элегантнее, то допили).
Я же говорил о совместной работе, просил кусок, где одновременно задается маска и регэксп.
Я этого куска не вижу.
Кстати ничего жесткого нет: Ctrl+C, далее Ctrl+V 3 раза :)
Ну да, ну да. Нормально.
Можно было еще так: 001.001.001.001|001.001.001.002|001.001.001.003|...
"Один, один, один, один... Алло, Лоис?... Черт. Один, один, один, два... Алло, Лоис?... Черт". Стьюи Гриффин

andrew.k, до**ся не до чего? Написал же:
Цитировать
Регэксп написан в спешке

Вот установка маски:
Цитировать
Код:
 m_leStrIP->setInputMask("000.000.000.000;");

В инете стопятсот сайтов с регэкспами. найти красивый регэксп для айпи-адреса не составляет труда.
Поэтому оправдания тут не уместны.

И что у тебя фильтруется ввод значений типа 399.555?
Сейчас возьму конкретно твой пример, пойду проверять. У меня одновременно не работает. Может дело в регэкспе?)


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 22, 2011, 14:17
Кстати у тебя:

m_leStrIP->setInputMask("000.000.000.000;");
m_leStrInIP->setValidator(validator);

Объекты разные или опечатка?
Я не докапываюсь, я хочу понять, почему у меня не работает, а у тебя вроде как работает.


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 22, 2011, 15:49
Кстати у тебя:

m_leStrIP->setInputMask("000.000.000.000;");
m_leStrInIP->setValidator(validator);

Объекты разные или опечатка?
Я не докапываюсь, я хочу понять, почему у меня не работает, а у тебя вроде как работает.
Не у меня, а у Larry. Человек спросил, я подкинул идею... а ты со своим флудом время тратишь. Зачем???


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 22, 2011, 16:23
Цитировать
В инете стопятсот сайтов с регэкспами.
Кстати, что делать будешь, если в интернете не найдешь (не в данном конкретном случае, а вообще)?


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 26, 2011, 11:47
Цитировать
В инете стопятсот сайтов с регэкспами.
Кстати, что делать будешь, если в интернете не найдешь (не в данном конкретном случае, а вообще)?
флуд это вот это ^^^^^^

ты че такой трудный?
Прочитай пять раз тему.
Я написал, что у меня не работает и хочу выяснить почему.


Название: Re: Нестандартный QLineEdit
Отправлено: alexman от Сентября 26, 2011, 13:47
Короче друг друга не поняли. Тема закрыта. совет: если такой умный, то выложил бы "крутой" регэксп.


Название: Re: Нестандартный QLineEdit
Отправлено: andrew.k от Сентября 26, 2011, 14:26
Короче друг друга не поняли. Тема закрыта. совет: если такой умный, то выложил бы "крутой" регэксп.

крутой регксп (http://regexlib.com/REDetails.aspx?regexp_id=547)