我在Qt5中使用QGraphicsScene来添加不同的QGraphicsItems。其中一些还有其他儿童用品,有些没有。但现在我需要找到所有顶级项目的可能性。当然,我可以编写一个方法,该方法将使用QList<QGraphicsItem *> QGraphicsScene::items(...) const
方法,然后遍历返回的列表,查找将返回0
作为其父项的所有项目。但是返回的列表可能很长,只有很少的顶级项目。
那么,还有更好的解决方案吗?
答案 0 :(得分:0)
我会尝试:
QGraphicsItem * QGraphicsItem::topLevelItem () const
因为在大多数实际情况中,只有一个顶级项目。否则,您需要使用items()
方法之一。如果选择降序排序,则可以在找到项目具有父项时立即停止迭代。
答案 1 :(得分:-1)
DIT:
方法QGraphicsScene::items()
返回按深度IIRC排序的项目,因此您可以循环访问它,直到父级不为空。这应该与顶级项目的数量呈线性关系,这可能是您可以做的最好的。
看来我错了,这个方法返回的是深度优先排序的项目,这与我们想要的相反。
但是也有一些重载允许您按名称对它们进行排序。
我建议您使用命名法来识别所有顶级项目(例如,所有名称都以“__top”开头)
然后,您可以循环while (name.startsWith("__top"))