Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QComboBox со столбцами. |
Автор: Diablus 11.2.2012, 19:42 |
Добрый вечер товарищи. Столкнулся со спецефичным требованием - нужно что бы при нажатии на элемент QComboBox (список) появлялся не обычный одно-столбцовый список, а двух столбцовый. Установка перегруженной табличной модели не помогла. Единственная мысль - создавать собственный элемент - перегружать к примеру кнопку + создавать окошко, с установкой сигналов/слотов. Возможно можно получить указатель на POP-окно QComboBox'а? Поделитесь опытом? |
Автор: math64 11.2.2012, 19:55 |
Кроме модели, нужно поменять view методом setView() - но не пробовал. |
Автор: borisbn 11.2.2012, 21:15 | ||
я делал проще - каждый элемент состоял из двух
|
Автор: Diablus 11.2.2012, 21:51 |
To math64 Мысль о перегрузке item-делегатов приходила на ум, однако разве не отсекается инфа уже в коде QComboBox? Попробую, если не найду иных вариантов. To borisbn Идея интересная, однако в каждой строчке (обоих столбцов) помимо текста должен присутствовать элемент QCheakBox, разделение пробелами не вариант. |
Автор: math64 11.2.2012, 22:34 |
Ну неслучайно же void QComboBox::setView ( QAbstractItemView * itemView ) а не void QComboBox::setView ( QListView * itemView ). Значит, туда можно попробовать засунуть QTableView или QTreeView. Конечно, не будут работать setItemIcon(), setItemText() и пр. методы, рассчитанные на одну колонку. Устанавливать данные придётся непосредственно через модель, а делегатов - через вид таблицы. Не будет, вероятно работать и редактор - void QComboBox::setLineEdit ( QLineEdit * edit ), а не QWidget*, как у делегатов. Но не пробовал. Если не получится - делать, как делал borisbn (можно написать proxyModel, отображающую tableModel в одну колонку и делегата, отображающего одну колонку как несколько. |
Автор: loneybibi 12.2.2012, 02:08 |
Для QComboBox::setView() ставишь QTreeView, а у дерева уже задаешь 2 колонки и заполняешь его элементами. |
Автор: Diablus 12.2.2012, 08:51 | ||
Перегружал, заполнял две колонки, отображается только одна. Есть такая функция QComboBox::SetColumnView(int) задающая как раз номер отображаемой колонки. |
Автор: math64 12.2.2012, 13:07 | ||
Покопайся в исходиниках, посмотри почему так выходит. Вероятно, QComboBox создаёт свой QListView взамен QTableView после твоего вызова setView(). Если не получится - делай как borisbn. Если данные выбираются из базы данных, запрос (для sqlite)
Делегат потом режет split(',') и выводит отдельными колонками. |
Автор: math64 12.2.2012, 15:44 | ||
Вот комбо-бокс с таблицей:
Но в свёрнутом виде показывает одну колонку - ту, что была выбрана. Но я думаю, это можно переопределить в производном классе. |
Автор: teatorb 13.9.2022, 16:53 |
Модератор: Сообщение скрыто. |
Автор: Queuego 5.11.2022, 05:34 |
Модератор: Сообщение скрыто. |