我想删除一个有子级的行QTreeView
。我使用QAbstractItemModel
'sremoveRow ( int row, const QModelIndex & parent = QModelIndex() )
方法,传递删除行的行和父索引。但是这个方法返回false。
如何删除有孩子的行?我是否需要编写一个递归删除行的方法?
你应该看看这个:removeRow
这是一个调用 removeRows() 的便捷函数。removeRows() 的 QAbstractItemModel 实现什么都不做。
在这里QAbstractItemModel::removeRows()
:
基类实现什么都不做并返回 false。
如果你实现了自己的模型,如果你想支持删除,你可以重新实现这个功能。或者,您可以提供自己的 API 来更改数据。
我知道我参加聚会有点晚了,但我想记录下来,因为我似乎找不到原始问题的任何好的答案。
QAbstractItemModel::removeRows
在你的模型中实现。有一个 Qt 示例Editable Tree Model,它显示了应该如何完成此操作。基本过程是调用beginRemoveRows
,删除项目,然后调用endRemoveRows
。removeRows
. 树项类应设置为在销毁时删除其子项。Qt 示例通过析构函数执行此操作,但在 C++11 及更高版本中,最好将子项存储在智能指针容器中,以便在容器超出范围时自动删除它们。QTreeView
子项目 - 知道子项目是否可见,并将相应地更新视图。换句话说,如果您删除了一个带有几个在树视图中可见的子项目的树项目,它们将自动从视图中删除。beginRemoveRows
这是我在任何地方都找不到的记录,但从个人经验来看,我可以说它有效(只要您endRemoveRows
正确调用)。