Не могу сделать ребенка в Qtreeview, используя QStandardItemModel - PullRequest
2 голосов
/ 11 июля 2011

После прочтения некоторых примеров я все еще что-то здесь упускаю. У меня есть Qtreeview для просмотра и QStandardItemModel для интерфейса данных, также использующий подкласс QSortFilterProxyModel, но я не знаю, насколько это уместно. Это моя логика: Сначала я создаю модель с QWidget в качестве родителя:

QStandardItemModel m_model = new QStandardItemModel(0,4,parent);
then setSourceModel(m_model)  for the widget

Установить вид дерева с помощью QSortFilterProxyModel. как то так:

GroupProxyModel = new GroupSortFilterProxyModel;
GroupProxyModel->setDynamicSortFilter(true);
setSourceModel(createSubjectModel(parent));

ui.treeView_mainwindow->setModel(GroupProxyModel);
ui.treeView_mainwindow->setSortingEnabled(true);

Затем я заполняю первый ряд так:

QList<QStandardItem *> items;
items.insert(0,new QStandardItem("Test 0"));
items.at(0)->setEditable(false);
m_model->insertRow(0,items);

До сих пор все работало нормально, и я вижу строку с данными. Но когда мне нравится добавить ребенка в строку, как это:

QModelIndex parentQModelIndex = m_model->item(0,0)->index();
m_model->insertRows(0,1,parentQModelIndex);
m_model->insertColumns(0,1,parentQModelIndex);
QModelIndex indexB = m_model->index(0, 0, parentQModelIndex);
m_model->setData(indexB,"Child test",Qt::DisplayRole);

Но я не вижу ребенка, почему?

1 Ответ

5 голосов
/ 11 июля 2011

Это не так, как работает QStandardItemModel - чтобы добавить дочерний элемент, вызовите appendRow (s) / insertRow (s) для родительского QStandardItem:

QStandardItem* child = new QStandardItem( tr("Child test") );
...
QStandardItem* parentItem = m_model->item( 0, 0 );
parentItem->appendRow( child );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...