QLineEdit для ввода IP-адреса, Создания виджета для ввода IPv4-адреса |
Здравствуйте, гость ( Вход | Регистрация )
QLineEdit для ввода IP-адреса, Создания виджета для ввода IPv4-адреса |
l0rdex |
20.8.2013, 10:21
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день!
Программа для редактирования настроек сетевых настроек маршрутизатора. Создал поле для ввода IP-адреса с помощью QLineEdit. Ограничил его маской:
Все вроде бы неплохо, но редактирование неудобно для пользователя. Хотелось бы еще ограничить внятным валидатором, но когда я его пишу:
то вместе с маской он не работает (ничего не вводится). Очень хотелось бы, чтоб поле ввода было как в windows (автоматический переход в следующий октет, удаление всей строки delete&backspace, диапазон в приделах [0-255]). Искал в паутине - ничего внятного не нашел. Помогите, плз! |
|
|
Litkevich Yuriy |
25.8.2013, 23:21
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
попробуй создать отдельную переменную указывающую на валидатор, и воспользуйся методом validate(), чтобы проверить работу валидатора.
На мой взгляд Регулярка правильно составлена |
|
|
l0rdex |
28.8.2013, 15:06
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Litkevich Yuriy |
28.8.2013, 19:42
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
l0rdex |
6.9.2013, 11:23
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
Валидатор не работал из-за маски. Если не ставить маску, то все классно работает, только точки приходится ставить руками.
Сейчас я думаю идти какими путями. Либо подружить маску с валидатором, хотя люди говорят, что вместе они не работают. Либо создавать отдельные 4 поля для ввода в каждом октете и потом их объеденять. Мож кто что посоветует? И еще вопрос: когда ставлю маску, то выделение идет по символам, а не стоит курсор между символами. как сделать, чтоб курсор был как в обычном поле для ввода текста? |
|
|
Алексей1153 |
6.9.2013, 13:57
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
l0rdex, я в своё время экспериментировал с окном ввода IP адреса (не в Qt, правда, но тут разницы нет). Всяко оно неудобно - а с умным валидатором и того хуже, так как человеку больше возни с вводом - надо прыгать по окошкам (в случае 4 окон) либо упираться в нестираемые точки
и... оставил вариант с самым простым окном ввода. Человек может вводить IP не глядя на экран, поэтому вместо точек там может появиться одно из ",б<юЮ>/?" - кто во что горазд. Поэтому, после подтверждения сохранения, я смотрю - если первый символ цифра, то считаю, что введён IP адрес и заменяю все приведённые в кавычках символы на точку. Иначе - оставляю как есть, так как это мог быть введён обычный адрес, а не IP в итоге - появляется возможность принимать не только IP, но и "привычный" адрес. Хранить, само собой, нужно тоже в текстовом виде |
|
|
Litkevich Yuriy |
8.9.2013, 17:35
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
И еще вопрос: когда ставлю маску, то выделение идет по символам, а не стоит курсор между символами. как сделать, чтоб курсор был как в обычном поле для ввода текста? скорее всего никак. При наличии маски ввод идёт как при включенном режиме замещения символов (клавиша Insert на клавиатуре) |
|
|
l0rdex |
10.9.2013, 12:00
Сообщение
#8
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
В общем решил пойти самым трудным и нелегким путем. Не взерая на то что программа немаленькая и уже выпущена, завьязана везде на полях QLineEdit (а для ввода IP-адресов у меня 8 разных полей в различных местах), плюнул на все и решил сделать человечно. В общем я разбил свой QLineEdit на 4 таких же, ограничив каждый из них валидатором. При изменении октета текст с него копируется в QString октета и зразу же в QString всего поля IP-адреса:
В результате получаю: Цитата Debugging starts LanIP= "192.168.3.1" Debugging has finished Все гуд дальше в программе я уже работаю с переменной qsLanIP и уже начал радоватся, но вот у меня еще есть функция сохранения/открытия конфигурации при помощи xml. Если раньше я считывал файл и сразу подставлял значение в поле для ввода ip-адреса , то сейчас мне считать текст с xml, найти запись между тегами <IP>192.168.1.110</P>, присвоить его переменной qsLanIP, потом как-то в этой переменной значение от начала до симова "." вставить в первый октет, потом от второй точки до третей во второй и т.д.Может кто знает как это изящно сделать? |
|
|
l0rdex |
10.9.2013, 16:09
Сообщение
#9
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
Решил проблему в предвидущем посте:
Осталось поставить ивент фильтры для перехода между октетами точкой или стрелочками. и можно сказать все) |
|
|
l0rdex |
2.10.2013, 12:43
Сообщение
#10
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 2.8.2013 Пользователь №: 3894 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доделал я эти поля. Не знаю, может и выглядит код не совсем правильно, но уж как есть, работает отлично. Решил поделиться как я делал одно из полей. Может кому-то будет полезно...
1) в дизайнере добавил 4 QLineEdit 2) между ними поставил точки с помощью QLabel 3) потом в описании класса установил фильтры событий на каждый октет
4) после чего добавил регулярное выражение и поставил валидатор
5) изначально при открытии формы, в поля подставляется ip-адрес, с которым мы работали до этого. Храниться у меня в переменной sysSettings.qsConnIp в виде "192.168.1.1". Потому нужно ее разбить на 4 октета:
6) Птом собственно описываем evetФильтры: Раскрывающийся текст
7) для работы с этим адресом, нужно записать его в переменную. Для этого использовал слоты: Раскрывающийся текст
В общем результате получилось следующее: |
|
|
Текстовая версия | Сейчас: 29.3.2024, 2:35 |