在QGraphicsScene中组织项目

时间:2017-07-03 12:28:50

标签: c++ list qt pointers scene

在列表中存储场景的图形项目是一种很好的做法吗? 我知道QGraphicsItem具有虚方法int type(),您可以按类型动态查找项目。所以我的意思是我想将我的图形项目存储在不同的列表中。

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;

我想用let {#1}}来管理项目 问题是我还不知道它可能导致什么,项目也非常庞大,所以这些变化会影响其他代码并花费大量时间。但我认为它可能有助于管理更安全的内存方式。 提前致谢

1 个答案:

答案 0 :(得分:0)

如果按值存储项目,则必须将它们视为值,并让容器管理内存。关于此类项目的明确delete是一个错误。 Qt的项目类不可复制 - 因此您可以:

  1. 使派生类可复制,因为QList必须复制。

  2. 使用std::list,因为它不需要复制。

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