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