1.如何对树节点增删改查?
一、如何对树节点增删改查?
1.创建树视图和数据模型
//为了展示方便,创建的都是临时局部变量,实际使用时一般为类成员变量
QStandardItemModel *model = new QStandardItemModel();
QTreeView *view = new QTreeView(this);
view->setModel(model);
view->show();
2.添加根节点
QStandardItem* itemRoot = m_model->invisibleRootItem();
QStandardItem* item0 = new QStandardItem;
item0->setText("item0");
itemRoot->appendRow(item0);
//记录当前选中节点
QStandardItem* itemCurrent = item0;
//设置新节点为点击选中状态
ui.treeView->setCurrentIndex(m_model->indexFromItem(item0));
3.添加子节点
if (itemCurrent == nullptr)
itemCurrent = itemRoot;
QStandardItem* item = new QStandardItem;
item->setText("item");
itemCurrent->appendRow(item);
//展开添加的子节点
ui.treeView->expand(m_model->indexFromItem(itemCurrent));
4.删除当前选中节点
if (itemCurrent == nullptr)
return;
QModelIndex index = m_model->indexFromItem(itemCurrent);
//是否有子节点
if (m_model->hasChildren(index))
{
int childCount = m_model->rowCount(index);
for (int i = 0; i < childCount; i++)
{
QModelIndex childIndex = m_model->index(i, 0, index);
m_model->removeRow(childIndex.row(), index);
}
}
//删除当前选中节点
m_model->removeRow(index.row(), index.parent());
//重新获取当前选中的节点
itemCurrent = m_model->itemFromIndex(ui.treeView->currentIndex());
5.更新当前节点(通过手动点击触发)
connect(m_view, &QTreeView::clicked, [=](const QModelIndex& index) {
itemCurrent = m_model->itemFromIndex(index);
});
持续更新中。。