繁体   English   中英

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

[英]Is there a possibility to get top-level items in a Qt QGraphicsScene?

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

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

我会尝试:

QGraphicsItem * QGraphicsItem::topLevelItem () const

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM