如何从 QTreeView 中删除根元素?

How to remove the root element from QTreeView?

我处理槽中树元素的移除。所有元素都被删除,除了最后一个(根)。

void TreeModel::slotDelete()
{
 QStandardItem *curItem = itemFromIndex(_tvMainTree->currentIndex());
 QStandardItem *curParent = itemFromIndex(_tvMainTree->currentIndex())->parent();

 if(!curItem || !curParent) return;

 curParent->removeRow(curItem->row());
}

为什么当我尝试删除最后一个元素时,curParent0x0

说明:我用invisibleRootItem()的根元素建树。

告诉我如何删除最后一个(根)元素?

根据定义,根项目是层次结构的顶部;它不能有 parent。所以你尝试的是无效的。

您似乎在使用 QStandardItemModel。比较QStandardItemModel::invisibleRootItem()的文档:

The invisible root item provides access to the model's top-level items [...] Calling index() on the QStandardItem object retrieved from this function is not valid.

换句话说:根 item/index 是隐式创建的;你不能删除它,此时必须停止递归。顺便说一句,这是使用 Qt 模型时的常见模式:如果 parent() returns nullptr 你已经到达了根索引。

感谢大家。这是解决方案。

void TreeModel::slotDelete()
{
 QStandardItem *curItem = itemFromIndex(_tvMainTree->currentIndex());
 if(!curItem) return;

 QStandardItem *curParent = curItem->parent();
 if(!curParent)
 {
  invisibleRootItem()->removeRow(curItem->row());
  return;
 }

 curParent->removeRow(curItem->row());
}