[英]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.