2012-09-19 128 views
1

我正在試驗QT庫和QGraphicsScene。 我可以將我自己的物體添加到場景中,並且一切正常。 我現在想要的是QGraphicsScene以外的物品。 讓我們來說正方形,圓形和三角形。 他們都住在這個場景中,當我添加它們時(如果我是正確的)被場景複製和擁有。C++指向QGraphicsItem的指針列表

問題是:什麼樣的列表模板容器最適合實現我的外部列表。

我想他們會需要指針,所以我想boost::ptr_container。 我知道我需要一個系統來確保列表與場景同步,一旦我開始刪除項目。這意味着在從場景中移除對象之前從列表中刪除指針。

任何想法,我應該如何建立這個系統將是非常好的。

回答

1

你不需要它,Qt爲你做了一切。

將項目添加到QGraphicsScene中後,場景將獲取該項目的所有權。這意味着,場景現在負責存儲該項目,並在需要時釋放該項目所佔用的內存(通常在您手動刪除項目時或者在場景本身被刪除時)。

只要你願意,你可以要求已通過調用items()功能添加到場景中的所有項目的清單:

MyGraphicScene.items(); 

該函數返回指針列表所有場景的項目作爲一個QList< QGraphicsItem * >,這正是你需要的。

+0

嗨 感謝您的回答。是的,我知道我可以使用物品()來獲取所有物品。但是如果我需要獲得所有的「方塊」或「小鼠」或其他什麼東西。一個場景可以包含1000多個項目。可以說我有一個盒子和circels場景。如果我想改變所有框的大小,但不是圓圈 –

+0

@Artis,在這種情況下'QList'將會做。實際上,'QList'是你應該在大多數情況下選擇的容器,除非你想要特殊的行爲(比如'QMap'中的鍵搜索)。 – SingerOfTheFall