删除 QTreeView 中项目的所有子元素

Posted

技术标签:

【中文标题】删除 QTreeView 中项目的所有子元素【英文标题】:Remove all sub-elements of an item in QTreeView 【发布时间】:2016-04-12 09:57:26 【问题描述】:

我有一个带有元素 baseItem 的 QTreeView,它本身包含一些子项:

baseItem
  - child1
  - child2
  - child3

现在我想删除该项目的所有子项,但不删除该项目本身。我目前的做法是打电话

if (baseItem->hasChildren())
    baseItem->removeRows(rowCnt,baseItem->rowCount());

...其中 rowCnt 是 baseItem 所在的行索引号。不幸的是,这仅在 baseItem 位于 rowCnt=0 时才有效。这里有什么问题?我还应该如何删除 baseItem 的所有子项?

谢谢!

【问题讨论】:

How to remove all rows and child rows from QTreeview的可能重复 Alexis P.: 不,这个线程描述了如何清除整个树,我想要做的是只删除树中特定元素的子元素,而这个元素和所有其他元素都还活着 baseItem->parent()->removeRows(baseItem->row(),baseItem->rowCount());工作?无法测试... 【参考方案1】:

...其中 rowCnt 是 baseItem 所在的行索引号。

不,rowCnt 是父级下的子树中的索引。 所以:

if (baseItem->hasChildren())
    baseItem->removeRows(0,baseItem->rowCount());

【讨论】:

以上是关于删除 QTreeView 中项目的所有子元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QAbstractItemModel 从 QTreeView 中删除行?

QTreeView、QTableView、不同层次层的显示项

重新实现 QStyledItemDelegate::paint - 如何获取子元素坐标?

遍历 QTreeView + QFileSystemModel 上具有所需文件扩展名的所有项目

如何在项目编辑期间清除 QTreeView 中的背景?

有效删除Ruby中数组中其他元素的所有子字符串