Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: INZER от Июнь 07, 2022, 17:13



Название: QComboBox со строкой ввода
Отправлено: INZER от Июнь 07, 2022, 17:13
Добрый день,
 
Использую QComboBox со свойством setEditable(true)
В данном режиме вверху комбобокса появляется lineEdit в кототом можно вводитьтекст
Данный lineEdit я использую для поиска и фильтрации значений в комбобокс.

Однако,  когда я ввожу текст, то Qt подставляет первый подходящий элемент из списка. Можно как то отключить это?

Скрин прикреплен по ссылке. В строку ввода я написал ".V", все остальное дописалось автоматически, что очень мешает, так как по сигналу currentTextChanged отслеживаю изменения текста.

https://disk.yandex.ru/i/ZJNeaHp6arnldg (https://disk.yandex.ru/i/ZJNeaHp6arnldg)



Название: Re: QComboBox со строкой ввода
Отправлено: PimenS от Июнь 07, 2022, 17:33
Привет.

Скорее всего можно настройками QCompleter что-то поменять


Название: Re: QComboBox со строкой ввода
Отправлено: INZER от Июнь 08, 2022, 00:23
Спасибо за наводку ... не знал об этом классе

Для меня идеально подошло:
cblAir->lineEdit()->completer()->blockSignals(true);

Для будущих потомков: может кому то будет интересно поиграться с различными видами автодополнения
QCompleter::PopupCompletion   0   Current completions are displayed in a popup window.
QCompleter::InlineCompletion   2   Completions appear inline (as selected text).
QCompleter::UnfilteredPopupCompletion   1   All possible completions are displayed in a popup window with the most likely suggestion indicated as current.

Устанавливаются методом
void   setCompletionMode(QCompleter::CompletionMode mode)

Странно что по аналогии с другими флагами нет что то типа QCompleter::NoCompletion  :'(


Название: Re: QComboBox со строкой ввода
Отправлено: sergek от Июнь 08, 2022, 13:59
Странно что по аналогии с другими флагами нет что то типа QCompleter::NoCompletion  :'(
Может, потому что вы пытаетесь приспособить стандартный виджет для несвойственного ему применения?  :-\
В параллельной теме о комбо с элементами выбора я хотел об этом вам написать, но погуг.. пояндексив, нашел, что вы не один такой креативный. Пусть принципы организации UI/UX сформулированы не нами, но чтобы их модифицировать, нужны весьма веские основания. Коих у вас, думаю, еще не появилось :)


Название: Re: QComboBox со строкой ввода
Отправлено: INZER от Июнь 09, 2022, 09:31
Тему Вы конечно подняли довольно таки спорную и холиварную.... ))

1 По поводу отключения автодополнения через флаг QCompleter мне кажется очень логичным, по аналогии с другими флагами фреймфорка, например QAbstractItemView::NoSelection.
2 Чекбоксы в комбобоксе расширяют его возможности до флага QAbstractItemView::MultiSelection в табличках. как по мне очень удобно там, где нет места для табличного представления.
3 .
Цитировать
Пусть принципы организации UI/UX сформулированы не нами, но чтобы их модифицировать, нужны весьма веские основания.
Да, например "требование дизайнера" является веским основанием или нет? В следующий раз отправлю им Вашу цитату :). В то же самое время разработчики фреймворка почему то не сделали UI классы final... А если пойти шире то многие "прокачивают" автомобили, а не ездят на стандартных комплектациях, многие делаю ремонт в квартирах а не живут в типовых коробочках  :) Иногда бывает и так что приходится модифицировать стандартное поведение UI.
4 Как я понимаю форумы нужны для решения технических вопросов, с которыми некоторые люди не могут справиться по различным причинам. Если акцентироваться на "зачем делать", а не "как делать", то  99% тем, НЕ относящихся к категории "помогите новичку" можно закрыть с формулировкой "зачем тебе это надо так никто не делает".

Со всем уважением и спасибо за помощь в параллельных темах  ;)




Название: Re: QComboBox со строкой ввода
Отправлено: sergek от Июнь 09, 2022, 13:04
Если акцентироваться на "зачем делать", а не "как делать", то  99% тем, НЕ относящихся к категории "помогите новичку" можно закрыть с формулировкой "зачем тебе это надо так никто не делает".
Да нет, что вы, вовсе я не хотел остудить ваш творческий порыв. Тем более "новичку", который стремится раздвинуть горизонты обычного :)
Я это написал с единственной целью, чтобы вы задумались над тем, что кроме разработчика есть еще и пользователи, которые не так "продвинуты", как вы, и что им привычнее пользоваться программой, в которой элементы ведут себя так, как они этого ожидают.
Успехов!