Название: QCodeSelector Отправлено: White Owl от Август 09, 2012, 01:05 Базовая задача: У нас имеется список каких-либо часто используемых кодов. Например это могут быть коды филиалов или регионов, или это могут быть "короткие имена". Главное то что пользователям часто удобнее писать в текстовом поле кода которые они уже хорошо знают и помнят, а не выбирать их из списка. В тоже время, таких кодов много и все их помнить просто невозможно.
Значит нужно поле ввода знающее список "кодов" и не дающее пользователям писать плохие кода и в то же время позволяющее выбирать эти кода из списка всех возможных кодов. Отсюда и появился виджет QCodeSelector основанный на QComboBox. Все кода в QCodeSelector собраны в дерево - группы с подгруппами и собственно код с описанием как лист дерева. Группы кодами не являются, выбор группы в дереве кладет в текстовое поле все кода принадлежащие этой группе. Текст в поле ввода не найденный в списке кодов уничтожается из поля ввода при потере фокуса. краткий пример работы с QCodeSelector: Код: // in the window constructor Писалось на 4.8, но вроде бы должно жить на всех 4.* Название: Re: QCodeSelector Отправлено: navrocky от Август 09, 2012, 01:38 Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть.
Или я не понял смысла ) ЗЫ. Вообще похоже на глюк, чекбоксы в списке не нажимаются мышкой... А судя по твоему описанию должны. opensuse 11.4, qt-4.8.1, oxygen Название: Re: QCodeSelector Отправлено: _OLEGator_ от Август 09, 2012, 08:52 Неа, не юзабельно.
Взят обычный QComboBox и никак его функциональность не используется, хотя у него есть своя вьюха, которую логично было бы использовать и работать с моделью, вместо этого создан свой QFrame с Не отслеживаются изменения размера QComboBox. Название: Re: QCodeSelector Отправлено: White Owl от Август 09, 2012, 17:13 Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть. Да, так. Все списки кодов с которыми я работаю сейчас практически все двух буквенные и пользователям обычно нет нужды в подсказках - они и так знают код своего филиала. А в каком виде ты хотел подсказку увидеть? ЗЫ. Вообще похоже на глюк, чекбоксы в списке не нажимаются мышкой... А судя по твоему описанию должны. Да, должны. Скорее всего действительно глюк. У меня сейчас винда с 4.8.2. В субботу попробую дома на Дебиане с 4.6.чем-то.opensuse 11.4, qt-4.8.1, oxygen Взят обычный QComboBox и никак его функциональность не используется, хотя у него есть своя вьюха, которую логично было бы использовать и работать с моделью, вместо этого создан свой QFrame с Вариант с использование встроенной вью и модели рассматривался, но был признан непригодным.Использовать модель не удобно потому что мне надо в дереве всегда показывать чекбоксы, а для этого надо пройти по всем элементам модели и поменять им флаги. Это значит что в соседнем вью построенном на той-же модели мистически появятся чекбоксы... Не отслеживаются изменения размера QComboBox. Да, это я уже сам увидел. Думаю...Название: Re: QCodeSelector Отправлено: xokc от Август 10, 2012, 14:16 Не логично совсем. Отметки в дереве ставятся, когда захотят, а не когда пользователь захочет, само дерево readonly (Windows 7, 4.8.2). В общем, я бы лично не смог юзеру объяснить, что именно надо делать, чтобы с этим работать.
Название: Re: QCodeSelector Отправлено: navrocky от Август 12, 2012, 21:43 Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть. Да, так. Все списки кодов с которыми я работаю сейчас практически все двух буквенные и пользователям обычно нет нужды в подсказках - они и так знают код своего филиала. А в каком виде ты хотел подсказку увидеть? Ну, к примеру, при наборе текста разворачивался список и подсвечивались подходящие варианты. Не подходящие строки были бы скрыты при этом. Еще подсказка как-бы намекает на то, что ты не ошибся при наборе. Название: Re: QCodeSelector Отправлено: andrew.k от Август 12, 2012, 23:03 нет времени сейчас посмотреть исходники, выложил бы скрин, как это выглядит.
Один вопрос, чем не подходит в описанной задаче QComboBox + QCompleter? Название: Re: QCodeSelector Отправлено: White Owl от Август 27, 2012, 20:41 Ну, к примеру, при наборе текста разворачивался список и подсвечивались подходящие варианты. Не подходящие строки были бы скрыты при этом. Еще подсказка как-бы намекает на то, что ты не ошибся при наборе. Не годится. Коды с которыми я работаю очень короткие, всего в два-четыре символа, но их при этом довольно много (несколько сотен) поэтому скрывать не подходящие точно не годится.А в поле ввода одновременно может быть до двух-трех десятков кодов (хотя обычно один-три), поэтому автоматически разворачивать список тоже не вижу смысла. Один вопрос, чем не подходит в описанной задаче QComboBox + QCompleter? QCompleter полезен только тогда, когда пользователь знает первые буквы слова. А если не знает?Вот например, захотел ты отправить письмо в США, а там надо указывать двух-буквенный код штата. А теперь спроси у средне-статистической почтовой работницы, с какой буквы начинается код штата Айова? :) Название: Re: QCodeSelector Отправлено: andrew.k от Август 27, 2012, 21:18 Один вопрос, чем не подходит в описанной задаче QComboBox + QCompleter? QCompleter полезен только тогда, когда пользователь знает первые буквы слова. А если не знает?Вот например, захотел ты отправить письмо в США, а там надо указывать двух-буквенный код штата. А теперь спроси у средне-статистической почтовой работницы, с какой буквы начинается код штата Айова? :) QCompleter::PopupCompletion 0 Current completions are displayed in a popup window. void QCompleter::complete ( const QRect & rect = QRect() ) |