Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QComboBox со столбцами. Вставка в QComboBox нескольких столюбцов 
:(
    Опции темы
Diablus
Дата 11.2.2012, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.2.2012

Репутация: нет
Всего: нет



Добрый вечер товарищи. 
Столкнулся со спецефичным требованием - нужно что бы при нажатии на элемент QComboBox (список) появлялся не обычный одно-столбцовый список, а двух столбцовый.
Установка перегруженной табличной модели не помогла. 
Единственная мысль - создавать собственный элемент - перегружать к примеру кнопку + создавать окошко, с установкой сигналов/слотов.
Возможно можно получить указатель на POP-окно QComboBox'а?
Поделитесь опытом?
PM MAIL   Вверх
math64
Дата 11.2.2012, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Кроме модели, нужно поменять view методом setView()  - но не пробовал.
PM   Вверх
borisbn
Дата 11.2.2012, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



я делал проще - каждый элемент состоял из двух
Цитата
itemFromColumn0 + "\t" + itemFromColumn1



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Diablus
Дата 11.2.2012, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.2.2012

Репутация: нет
Всего: нет



To math64
Мысль о перегрузке item-делегатов приходила на ум, однако разве не отсекается инфа уже в коде QComboBox? Попробую, если не найду иных вариантов.
To borisbn 
Идея интересная, однако в каждой строчке (обоих столбцов) помимо текста должен присутствовать элемент QCheakBox, разделение пробелами не вариант.

Это сообщение отредактировал(а) Diablus - 11.2.2012, 21:54
PM MAIL   Вверх
math64
Дата 11.2.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Ну  неслучайно же void QComboBox::setView ( QAbstractItemView * itemView ) а не void QComboBox::setView ( QListView * itemView ).
Значит, туда можно попробовать засунуть QTableView или QTreeView.
Конечно, не будут работать setItemIcon(), setItemText() и пр. методы, рассчитанные на одну колонку. Устанавливать данные придётся непосредственно через модель, а делегатов - через вид таблицы.
Не будет, вероятно работать и редактор - void QComboBox::setLineEdit ( QLineEdit * edit ), а не QWidget*, как у делегатов.
Но не пробовал.
Если не получится - делать, как делал borisbn (можно написать proxyModel, отображающую tableModel в одну колонку и делегата, отображающего одну колонку как несколько.
PM   Вверх
loneybibi
Дата 12.2.2012, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Для QComboBox::setView() ставишь QTreeView, а у дерева уже задаешь 2 колонки и заполняешь его элементами.


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
Diablus
Дата 12.2.2012, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.2.2012

Репутация: нет
Всего: нет



Цитата(loneybibi @ 12.2.2012,  02:08)
Для QComboBox::setView() ставишь QTreeView, а у дерева уже задаешь 2 колонки и заполняешь его элементами.

Перегружал, заполнял две колонки, отображается только одна.
Есть такая функция QComboBox::SetColumnView(int) задающая как раз номер отображаемой колонки.

Это сообщение отредактировал(а) Diablus - 12.2.2012, 08:52
PM MAIL   Вверх
math64
Дата 12.2.2012, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Покопайся в исходиниках, посмотри почему так выходит. Вероятно, QComboBox создаёт свой QListView взамен  QTableView после твоего вызова setView().
Если не получится - делай как borisbn.
Если данные выбираются из базы данных, запрос (для sqlite)
Код

select column1 || ',' || column2 || ',' || column3 from table; 

Делегат потом режет split(',') и выводит отдельными колонками.
PM   Вверх
math64
Дата 12.2.2012, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Вот комбо-бокс с таблицей:
Код

#include <QtGui/QApplication>
#include <QtGui/QTableView>
#include <QtGui/QComboBox>
#include <QtGui/QFileSystemModel>
int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  QFileSystemModel model;
  model.setRootPath(".");
  QTableView& table = *new QTableView;
  QComboBox cb;
  cb.setModel(&model);
  cb.setRootModelIndex(model.index("."));
  cb.setView(&table);
  //!!! Установите модель после setView() !!!
  table.setModel(&model);
  table.setRootIndex(model.index("."));
  cb.setMinimumWidth(500);
  cb.show();
  return app.exec();
}

Но в свёрнутом виде показывает одну колонку - ту, что была выбрана.
Но я думаю, это можно переопределить в производном классе.

PM   Вверх
teatorb
Дата 13.9.2022, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 12.9.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Queuego
Дата 5.11.2022, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 4.11.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1382 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.