 РЈРСВВВВВВВВеньшено Р В Р’В Р СћРІР‚ВВВВВВВР С• 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