Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: White Owl от Август 09, 2012, 01:05



Название: QCodeSelector
Отправлено: White Owl от Август 09, 2012, 01:05
Базовая задача: У нас имеется список каких-либо часто используемых кодов. Например это могут быть коды филиалов или регионов, или это могут быть "короткие имена". Главное то что пользователям часто удобнее писать в текстовом поле кода которые они уже хорошо знают и помнят, а не выбирать их из списка. В тоже время, таких кодов много и все их помнить просто невозможно.
Значит нужно поле ввода знающее список "кодов" и не дающее пользователям писать плохие кода и в то же время позволяющее выбирать эти кода из списка всех возможных кодов.

Отсюда и появился виджет QCodeSelector основанный на QComboBox.
Все кода в QCodeSelector собраны в дерево - группы с подгруппами и собственно код с описанием как лист дерева. Группы кодами не являются, выбор группы в дереве кладет в текстовое поле все кода принадлежащие этой группе. Текст в поле ввода не найденный в списке кодов уничтожается из поля ввода при потере фокуса.

краткий пример работы с QCodeSelector:
Код:
// in the window constructor
QCodeSelector *codeSelector = new QCodeSelector();
QTreeWidgetItem *group = codeSelector->addItem("Group", "sample group");
codeSelector->addItem("A1", "item A1", group);
codeSelector->addItem("A2", "item A2", group);
codeSelector->addItem("A3", "item A3", group);
this->layout()->addWidget(codeSelector);

// in the Ok button
QSqlQuery qry( QString("select * from t1 where code in (%1)").arg(codeSelector->getQuotedCodes()) );
Версия deep-alpha, но вроде бы уже работает вполне удовлетворительно. Прошу посмотреть, поругать, посоветовать.
Писалось на 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 с медленным QTreeWidget.
Не отслеживаются изменения размера QComboBox.


Название: Re: QCodeSelector
Отправлено: White Owl от Август 09, 2012, 17:13
Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть.
Да, так.
Все списки кодов с которыми я работаю сейчас практически все двух буквенные и пользователям обычно нет нужды в подсказках - они и так знают код своего филиала.
А в каком виде ты хотел подсказку увидеть?

ЗЫ. Вообще похоже на глюк, чекбоксы в списке не нажимаются мышкой... А судя по твоему описанию должны.
opensuse 11.4, qt-4.8.1, oxygen
Да, должны. Скорее всего действительно глюк. У меня сейчас винда с 4.8.2. В субботу попробую дома на Дебиане с 4.6.чем-то.


Взят обычный QComboBox и никак его функциональность не используется, хотя у него есть своя вьюха, которую логично было бы использовать и работать с моделью, вместо этого создан свой QFrame с медленным QTreeWidget.
Вариант с использование встроенной вью и модели рассматривался, но был признан непригодным.
Использовать модель не удобно потому что мне надо в дереве всегда показывать чекбоксы, а для этого надо пройти по всем элементам модели и поменять им флаги. Это значит что в соседнем вью построенном на той-же модели мистически появятся чекбоксы...

Не отслеживаются изменения размера 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() )