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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Анна
  опции профиля:
сообщение 15.7.2011, 9:52
Сообщение #2


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

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

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




Репутация:   4  


 Уменьшено до 70%
Прикрепленное изображение
872 x 364 (98.22 килобайт)

Вот картинка.
Все элементы принадлежат одной модели 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 11:08