crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Названия столбцов
Анна
  опции профиля:
сообщение 14.7.2011, 15:17
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


[root]
|
L[item 1]
| L[item][item][item]
| L[item][item][item]
|
L[item 2]
| L[item][item][item][item][item]
| L[item][item][item][item][item]
| L[item][item][item][item][item]

Имеется вот такое дерево. Дети item1 представляют собой таблицу с одними данными. Дети item2 - другую таблицу.
Отобразить их в разных вьюверах не проблема. Проблема в том, что заголовки столбцов в обоих вьюверах выходят одинаковыми, т. к. задаются одной моделью. Кроме того дети из нулевых колонок отображаются в дереве, что не желательно (хотя это легко решается, если подтаблицу начинать не с 0 , а с 1 колонки ).Подскажите, как обойти.

Пока что в голову пришло завести model1 и model2 и хранить указатели на них в [item1] и [item2] соответственно и подсовывать тогда можно будет в один и тот же вьювер...

Сообщение отредактировал Анна - 14.7.2011, 15:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.7.2011, 18:55
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


конечную цель не понял, если можно, то лучше картинку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 14.7.2011, 19:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


А может, для каждой таблицы сделать делегата, в котором отображать QTableView/QTableWidget?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 15.7.2011, 9:52
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Прикрепленное изображение

Вот картинка.
Все элементы принадлежат одной модели QStandardItemModel.
В tablwView1 отображаются дети root1, а в tableView2 - дети root2.
У всех трёх вьюверов одинаковые названия колонок, потому что они задаются в модели. И это сильно портит мне жизнь.
Кстати, обратите внимание, что в правых вьюверах пронумерована только одна строка. Это потому, что в модель добавлен только один элемент (0,0), а все остальные его дети.

Всё это нужно для того, чтобы имея только один tableView подсовывать ему подтаблички из одного дерева (root1 или root2) в зависимости, куда ткнули мышкой в дереве;

Пока что придумалось только такое:


Раскрывающийся текст
{
QStandardItemModel *table_1 = new QStandardItemModel(this);
// набиваем модель элементами и устанавливаем заголовки
table_1->appendRow(...);
...

QStandardItemModel *table_2 = new QStandardItemModel(this);
// набиваем модель элементами и устанавливаем заголовки
table_1->appendRow(...);
...

// создаём ОСНОВНОЕ дерево
QStandardItemModel *model = new QStandardItemModel(this);

QStandardItem *it = new QStandardItem("root");
model->appendRow( it);

*it = new QStandardItem("Table 1");
QVariant v;
v.setValue((void*) model_1);
it->setData(v, Qt::UserRole+1);
model->item(0,0)->appendRow(it);

*it = new QStandardItem("Table 2");
v.setValue((void*) model_2);
it->setData(v, Qt::UserRole+1);
model->item(0,0)->appendRow(it);


QTreeView *treeView = new QTreeView(this);
QtableView *tableView = new QTableView(this);
treeView->setModel(model);
...
}

// в слоте, обрабатывающем тычок мыши на элементе пишем
...
QStandardItemModel *m = (QStandardItemModel *)curr_item->value<void*>();
tableView->setModel(m);


Всё, что пришло в голову на данный момент это перегрузить у QAbstractProxyModel (реально, проще оказалось у QSortFilterProxyModel) функции setHeaderData() и headerData(), и подкладывать модель табличному вьюверу через прокси.

Сообщение отредактировал Анна - 19.7.2011, 14:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 5.8.2011, 14:12
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


Очень интересно реализована такая схема в MS Access (только там видел, но наверняка есть еще где-то)

Суть в том, что при тычке на root, его ячейка расширяется и туда пихается таблица содержащая его детей (только один уровень)

Далее при тычке на ячейке в дочерней табличке, ячейка расширяется и туда пихается еще одна таблица и т.д.

Можно вместо таблиц пихать, например, QTreeView.

В целом novichkov прав - для нужно делать делегат, только не для каждой таблицы а один для всех.

P.S. может это на первый взгляд покажется сложно в реализации, но на самом деле все гораздо проще, чем кажется ;).
P.S.S. можете считать меня извращенцем, но испытал большое наслаждение когда реализовал это! :)

Сообщение отредактировал PAFOS - 5.8.2011, 14:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 6.1.2025, 19:22