簡體   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