2015-11-12 42 views
1

之后增加孩子我有一个QTreeWidget其中一旦单击某个项目的扩展 - 当itemExpanded信号发出,我使用算法来构建QList<QTreeWidgetItem*>并将其与QTreeWidgetItem::addChildren添加到扩展项目。Qt的QTreeWidgetItem - 清理旧

这有效,但是如果我再次合拢并展开它,它会添加更多的孩子,所以我会得到重复的。所以我必须先移除旧的孩子。为此,我使用qDeleteAll(item->takeChildren()),然后用addChildren添加新的。事情是,它出于某种原因不起作用。它仍然是空的。

是否有一些执行此类操作的标准方法?

+1

我不认为你应该使用itemExpanded信号添加和删除项目。尝试在单独的过程中执行此操作,并在实际需要更改时更新项目。 –

+0

你是什么意思?我需要在扩展它们时添加它们。我正在处理一个非常深的目录,我无法添加所有内容,只能在扩展时添加扩展内容。 –

+0

我不是QTreeWidget的专家,但我怀疑它是由于此功能导致的 “如果孩子已经插入别处,则不会再插入。” –

回答

0

这听起来像你真的想使用QTreeView与自定义QAbstractItemModel。是的,如果以前从未这样做过,那看起来有点可怕,但关键优势在于,在这种方法中,视图会要求您输入商品数据,如果需要时以及何时需要,无需预先填充它。

或者,请考虑Michael Boone给出的建议:不要删除所有子项目,然后重新添加它们,为什么不检查是否已添加子项目(如果需要,可以选择更新它们) ?