2017-07-03 339 views
0

這是一個很好的練習來將圖形的場景項目存儲在列表中嗎? 我知道QGraphicsItem有虛擬方法int type(),您可以通過類型動態查找項目。所以我的意思是我想將我的圖形項目保存在單獨的列表中。在QGraphicsScene中組織項目

class Scene : public QGraphicsScene 
{ 
     public: 
     // Constructors etc. 
     private: 
     // Store graphic items in lists by value 
     QList<Carrot> m_carrots; 
     QList<Apple> m_apples; 
}; 

這聽起來愚蠢的,但關心的主要問題我已經在我的當前項目的一切被綁定在使用指針有時也有段故障。並使用刪除項目

delete item; 
item = nullptr; 

我只想用它來管理項目,讓我們說m_apples.removeAt(index). 問題是我還不知道什麼可以導致,也是該項目是非常巨大的,所以這些變化可影響其他代碼片段並花費大量時間。但我認爲這可能有助於管理內存更安全的方式。 在此先感謝

+0

您按價值存儲列表,但這與任何堆棧無關。 –

回答

0

如果按值存儲項目,則必須將它們視爲值並讓容器管理內存。在這樣的項目上明確delete是一個錯誤。 Qt的項目類是不可拷貝 - 因此,您可以:

  1. 使派生類可複製爲QList具有複製。

  2. 使用std::list,因爲它不需要複製。

  3. 使用唯一指針的向量,例如, std::vector<std::unique_ptr>

+0

謝謝你的回答@KubaOber。我的意思是說沒有人會這樣做,避免指針。我只是非常想知道是否存在另一種利用qt中的對象的方式。但是隨着我向前移動,我明白將父對象分配到堆上的對象工作得很好。 – Vadixem

+1

我一直這樣做。它給你更小更快的代碼。傾向於按價值存儲東西。 –