删除在QTreeView中具有子级的行
我想从删除在QTreeView中具有子级的行,qt,qtreeview,Qt,Qtreeview,我想从QTreeView中删除包含子项的行。我使用qabstractemmodel的removow(int row,const QModelIndex&parent=QModelIndex())方法,传递已删除行的行和父索引。但是这个方法返回false 如何删除包含子项的行?我需要写一个递归删除行的方法吗?您应该看看这个: 这是一个调用removeRows()的方便函数。removeRows()的QAbstractItemModel实现不起任何作用 在这里的qabstractemmodel::r
QTreeView
中删除包含子项的行。我使用qabstractemmodel
的removow(int row,const QModelIndex&parent=QModelIndex())
方法,传递已删除行的行和父索引。但是这个方法返回false
如何删除包含子项的行?我需要写一个递归删除行的方法吗?您应该看看这个:
这是一个调用removeRows()的方便函数。removeRows()的QAbstractItemModel实现不起任何作用
在这里的qabstractemmodel::removows()
:
基类实现不执行任何操作并返回false
如果实现自己的模型,如果希望支持删除,则可以重新实现此功能。或者,您可以提供自己的API来更改数据
我知道我参加聚会有点晚了,但我想记录下来,因为我似乎找不到任何好的答案来回答最初的问题
qabstractemmodel::removows
。有一个Qt示例,Editable Tree Model,它显示了应该如何实现这一点。基本过程是调用beginRemoveRows
,删除项目,然后调用endremoveows
removeRows
中对父项调用此方法。树项目类应设置为在销毁时删除其子项。Qt示例通过析构函数实现这一点,但对于C++11及更高版本,最好将子对象存储在智能指针容器中,以便在容器超出范围时自动删除它们QTreeView
知道子项是否可见,并将相应地更新视图。换言之,如果删除一个树项目,其中包含几个在树视图中可见的子项目,则这些子项目将自动从视图中删除。这是我在任何地方都找不到的文档,但从个人经验来看,我可以说它是有效的(只要您正确调用beginRemoveRows
和endRemoveRows
)QabstracteModel的removeRow方法实现了吗?您使用自己的模型类还是标准的Qt类之一?哪一个?如果removeRow做了什么取决于removeRows()的模型实现。默认impl不执行任何操作并返回false。