Russian Qt Forum
Ноябрь 23, 2024, 04:23
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
[РЕШЕНО] QRegExp и QLineEdit
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] QRegExp и QLineEdit (Прочитано 5586 раз)
psk07
Гость
[РЕШЕНО] QRegExp и QLineEdit
«
:
Сентябрь 23, 2019, 12:57 »
Всем привет. Помогите люди добрые с QRexExp.
Стоит нестандартная задача, надо сделать поисковое окно, в котором 50 QLineEdit. 10 строк по 5 полей ввода. В каждой строке поля ввода между собой соединены, как значение &, а сами строки между собой соединены, как значения |.
Помогите пожалуй сделать рабочий QRegExp. В моем случае regExp.indexIn() проверяет QString на соответствие поисковому запросу.
На сайте regex101 данный вариант работает:
^.*(((?=.*Line1)(?=.*Line2)(?=.*Line3)(?=.*Line4)(?=.*Line5))|((?=.*Line6)(?=.*Line7)(?=.*Line8)(?=.*Line9)(?=.*Line10))|((?=.*Line11)(?=.*Line12)(?=.*Line13)(?=.*Line14)(?=.*Line15))|((?=.*Line16)(?=.*Line17)(?=.*Line18)(?=.*Line19)(?=.*Line20))|((?=.*Line21)(?=.Line22*)(?=.*Line23)(?=.*Line24)(?=.*Line25))|((?=.*Line26)(?=.*Line27)(?=.*Line28)(?=.*Line29)(?=.*Line30))|((?=.*Line31)(?=.*Line32)(?=.Line33)(?=.Line34)(?=.*Line35))|((?=.*Line36)(?=.*Line37)(?=.*Line38)(?=.*Line39)(?=.*Line40))|((?=.*Line41)(?=.*Line42)(?=.*Line43)(?=.*Line44)(?=.*Line45))|((?=.*Line46)(?=.*Line47)(?=.48)(?=.*49)(?=.*50))).*$
Если я правильно понимаю, то в QRegExp беды с точкой, то тогда чем заменить ленивый поиск .* ?
Заранее всем спасибо.
«
Последнее редактирование: Сентябрь 26, 2019, 07:55 от psk07
»
Записан
qate
Супер
Offline
Сообщений: 1177
Re: QRegExp и QLineEdit
«
Ответ #1 :
Сентябрь 23, 2019, 15:47 »
В эпоху интерфейсов с одной кнопкой, 50 QLineEdit-ов смотрятся очень приятно )
QRegExp::setMinimal ?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QRegExp и QLineEdit
«
Ответ #2 :
Сентябрь 23, 2019, 20:15 »
смущает
?=
— может там должно быть
?:
? да и QRexExp, в отличие от QRegularExpression, не поддерживает
?=
(lookahead).
а почему нельзя просто тупо склеить содержимое полей ввода одной строки? Line1Line2Line3Line4Line5. Тогда искомое выражение будет (?:Line1Line2Line3Line4Line5)|(?:Line6Line7Line8Line9Line10)|... Или каждое поле ввода матчит лишь часть строки? В таком случае поставить .* между ними (по краям внутри скобки не надо).
«
Последнее редактирование: Сентябрь 23, 2019, 20:18 от kambala
»
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #3 :
Сентябрь 24, 2019, 09:15 »
Цитата: kambala от Сентябрь 23, 2019, 20:15
смущает
?=
— может там должно быть
?:
? да и QRexExp, в отличие от QRegularExpression, не поддерживает
?=
(lookahead).
а почему нельзя просто тупо склеить содержимое полей ввода одной строки? Line1Line2Line3Line4Line5. Тогда искомое выражение будет (?:Line1Line2Line3Line4Line5)|(?:Line6Line7Line8Line9Line10)|... Или каждое поле ввода матчит лишь часть строки? В таком случае поставить .* между ними (по краям внутри скобки не надо).
Если все 5 значений находятся в строке, до данная строка идёт на отображение в QListView.
а) В данном варианте склейки есть чувствительность поиска к порядку ввода данных Line1Line2Line3Line4Line5, как можно решить данную проблему?
б) Такую же проблему заметил с поиском по значениям или. Поля поиска должны соответствовать своему положению в строке, L6-L10 не может быть раньше L1-L5.
в) Каждое поле ввода матчит часть строки. Правильно я вас понял насчёт вставки .* ?
(?:.*Line1.*Line2.*Line3.*Line4.*Line5)|(?:.*Line6.*Line7.*Line8.*Line9.*Line10)|...
Заранее спасибо.
«
Последнее редактирование: Сентябрь 24, 2019, 10:28 от psk07
»
Записан
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #4 :
Сентябрь 24, 2019, 09:16 »
Цитата: qate от Сентябрь 23, 2019, 15:47
В эпоху интерфейсов с одной кнопкой, 50 QLineEdit-ов смотрятся очень приятно )
QRegExp::setMinimal ?
Опробую сегодня, спасибо за направление, там же нашёл и пилюли для борьбы с регистром.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QRegExp и QLineEdit
«
Ответ #5 :
Сентябрь 24, 2019, 11:31 »
а) путем создания 5!=120 перестановок для каждой строки: 12345, 12354, ...
б) если склеивание через | работает не так, как хотелось бы, то можно просто перебирать строки в цикле по очереди: выход из цикла при совпадении
в) .* перед ?: не надо (это сразу так и работает)
хитрый, конечно, функционал...
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #6 :
Сентябрь 24, 2019, 15:18 »
Цитата: kambala от Сентябрь 24, 2019, 11:31
а) путем создания 5!=120 перестановок для каждой строки: 12345, 12354, ...
б) если склеивание через | работает не так, как хотелось бы, то можно просто перебирать строки в цикле по очереди: выход из цикла при совпадении
в) .* перед ?: не надо (это сразу так и работает)
хитрый, конечно, функционал...
Не совсем понял насчёт пункта а, буду благодарен за набросок.)
По поводу пункта в, по мистическим причинам работает только с .* перед ?:
Второй день уже прыгаю с бубном вокруг этого функционала)
«
Последнее редактирование: Сентябрь 24, 2019, 15:29 от psk07
»
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QRegExp и QLineEdit
«
Ответ #7 :
Сентябрь 24, 2019, 16:38 »
а) если интересует абсолютно произвольный порядок пяти строк, то нужно рассмотреть все возможные перестановки пяти элементов, их количество равно 5!=120. Пример для трех, 3!=6: 123, 132, 312, 321, 231, 213. Все эти варианты склеить через |, ну либо циклом аналогично пункту б)
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #8 :
Сентябрь 25, 2019, 07:55 »
Цитата: kambala от Сентябрь 24, 2019, 16:38
а) если интересует абсолютно произвольный порядок пяти строк, то нужно рассмотреть все возможные перестановки пяти элементов, их количество равно 5!=120. Пример для трех, 3!=6: 123, 132, 312, 321, 231, 213. Все эти варианты склеить через |, ну либо циклом аналогично пункту б)
а)Методом проб и ошибок достиг нужного результата с Line№Line№Line№Line№Line№, вот таким результатом. (?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№), но перестали работать значения или.
(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)|(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)(?=.*Line№)...
Подскажите пожалуйста, как можно решить данную проблему?
б) Дальше у меня задача, через QCombobox дать пользователю возможность выбора подсветки фона для каждого .*Line№.*Line№.*Line№.*Line№.*Line№. Буду рад любым интересным соображениям по реализации.)
«
Последнее редактирование: Сентябрь 25, 2019, 10:40 от psk07
»
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QRegExp и QLineEdit
«
Ответ #9 :
Сентябрь 25, 2019, 11:52 »
а) вместо или можно цикл
б) не очень понятно чего хочется добиться
вставить по комбобоксу в строку, в котором выбирать цвет строки?
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #10 :
Сентябрь 25, 2019, 12:32 »
Цитата: kambala от Сентябрь 25, 2019, 11:52
а) вместо или можно цикл
б) не очень понятно чего хочется добиться
вставить по комбобоксу в строку, в котором выбирать цвет строки?
а) на той же мысли остановился)
б) каждой строке поиска пользователь может задавать цвет фона найденным совпадениям.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: QRegExp и QLineEdit
«
Ответ #11 :
Сентябрь 25, 2019, 13:55 »
Цитировать
вставить по комбобоксу в строку, в котором выбирать цвет строки
это не подходит? либо я все равно не понял требования...
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
psk07
Гость
Re: QRegExp и QLineEdit
«
Ответ #12 :
Сентябрь 25, 2019, 14:26 »
Цитата: kambala от Сентябрь 25, 2019, 13:55
Цитировать
вставить по комбобоксу в строку, в котором выбирать цвет строки
это не подходит? либо я все равно не понял требования...
Спасибо за помощь с регуляркой. С комбобоксом, пока сам повожусь, т.к ещё до конца не продумал реализацию, потому не не получается корректно выразить мысль.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...