2012-09-19 87 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