Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除在QTreeView中具有子级的行_Qt_Qtreeview - Fatal编程技术网

删除在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。