在阅读了一些例子后,我仍然遗漏了一些东西。 我有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);
但是我没有看到孩子,为什么?
答案 0 :(得分:5)
这不是QStandardItemModel的工作原理 - 添加子节点,在父QStandardItem上调用appendRow(s)/ insertRow(s):
QStandardItem* child = new QStandardItem( tr("Child test") );
...
QStandardItem* parentItem = m_model->item( 0, 0 );
parentItem->appendRow( child );