Russian Qt Forum
Ноябрь 23, 2024, 22:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCodeSelector  (Прочитано 6421 раз)
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.*
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Август 09, 2012, 01:38 »

Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть.

Или я не понял смысла )

ЗЫ. Вообще похоже на глюк, чекбоксы в списке не нажимаются мышкой... А судя по твоему описанию должны.

opensuse 11.4, qt-4.8.1, oxygen
« Последнее редактирование: Август 09, 2012, 01:41 от navrocky » Записан

Гугль в помощь
_OLEGator_
Гость
« Ответ #2 : Август 09, 2012, 08:52 »

Неа, не юзабельно.
Взят обычный QComboBox и никак его функциональность не используется, хотя у него есть своя вьюха, которую логично было бы использовать и работать с моделью, вместо этого создан свой QFrame с медленным QTreeWidget.
Не отслеживаются изменения размера QComboBox.
Записан
White Owl
Гость
« Ответ #3 : Август 09, 2012, 17:13 »

Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть.
Да, так.
Все списки кодов с которыми я работаю сейчас практически все двух буквенные и пользователям обычно нет нужды в подсказках - они и так знают код своего филиала.
А в каком виде ты хотел подсказку увидеть?

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


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

Не отслеживаются изменения размера QComboBox.
Да, это я уже сам увидел. Думаю...
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Август 10, 2012, 14:16 »

Не логично совсем. Отметки в дереве ставятся, когда захотят, а не когда пользователь захочет, само дерево readonly (Windows 7, 4.8.2). В общем, я бы лично не смог юзеру объяснить, что именно надо делать, чтобы с этим работать.
« Последнее редактирование: Август 10, 2012, 14:20 от xokc » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Август 12, 2012, 21:43 »

Что-то оно не юзабельно как-то. В выпавшем списке ничего выбрать нельзя, только просмотреть. При набирании текста в комбобоксе не появляется никаких подсказок. То есть это как бы получается QLineEdit и отдельно памятка по кодам, в которую можно заглянуть.
Да, так.
Все списки кодов с которыми я работаю сейчас практически все двух буквенные и пользователям обычно нет нужды в подсказках - они и так знают код своего филиала.
А в каком виде ты хотел подсказку увидеть?

Ну, к примеру, при наборе текста разворачивался список и подсвечивались подходящие варианты. Не подходящие строки были бы скрыты при этом.
Еще подсказка как-бы намекает на то, что ты не ошибся при наборе.
Записан

Гугль в помощь
andrew.k
Гость
« Ответ #6 : Август 12, 2012, 23:03 »

нет времени сейчас посмотреть исходники, выложил бы скрин, как это выглядит.
Один вопрос, чем не подходит в описанной задаче QComboBox + QCompleter?
Записан
White Owl
Гость
« Ответ #7 : Август 27, 2012, 20:41 »

Ну, к примеру, при наборе текста разворачивался список и подсвечивались подходящие варианты. Не подходящие строки были бы скрыты при этом. Еще подсказка как-бы намекает на то, что ты не ошибся при наборе.
Не годится. Коды с которыми я работаю очень короткие, всего в два-четыре символа, но их при этом довольно много (несколько сотен) поэтому скрывать не подходящие точно не годится.
А в поле ввода одновременно может быть до двух-трех десятков кодов (хотя обычно один-три), поэтому автоматически разворачивать список тоже не вижу смысла.

Один вопрос, чем не подходит в описанной задаче QComboBox + QCompleter?
QCompleter полезен только тогда, когда пользователь знает первые буквы слова. А если не знает?
Вот например, захотел ты отправить письмо в США, а там надо указывать двух-буквенный код штата. А теперь спроси у средне-статистической почтовой работницы, с какой буквы начинается код штата Айова? Улыбающийся
Записан
andrew.k
Гость
« Ответ #8 : Август 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() )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.