是否有可能在Qt QGraphicsScene中获得顶级项目?

时间:2014-10-30 09:04:28

标签: c++ qt qgraphicsscene

我在Qt5中使用QGraphicsScene来添加不同的QGraphicsItems。其中一些还有其他儿童用品,有些没有。但现在我需要找到所有顶级项目的可能性。当然,我可以编写一个方法,该方法将使用QList<QGraphicsItem *> QGraphicsScene::items(...) const方法,然后遍历返回的列表,查找将返回0作为其父项的所有项目。但是返回的列表可能很长,只有很少的顶级项目。

那么,还有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

我会尝试:

QGraphicsItem * QGraphicsItem::topLevelItem () const

因为在大多数实际情况中,只有一个顶级项目。否则,您需要使用items()方法之一。如果选择降序排序,则可以在找到项目具有父项时立即停止迭代。

答案 1 :(得分:-1)

DIT: 方法QGraphicsScene::items() 返回按深度IIRC排序的项目,因此您可以循环访问它,直到父级不为空。这应该与顶级项目的数量呈线性关系,这可能是您可以做的最好的。

看来我错了,这个方法返回的是深度优先排序的项目,这与我们想要的相反。

但是也有一些重载允许您按名称对它们进行排序。

我建议您使用命名法来识别所有顶级项目(例如,所有名称都以“__top”开头) 然后,您可以循环while (name.startsWith("__top"))