2

我正在尝试使用 QT 库和QGraphicsScene. 我可以将自己的对象添加到场景中,一切都很好。我现在想要QGraphicsScene的是对象之外的一些列表。比如说正方形、圆形和三角形。它们都存在于场景中,并且(如果我是正确的)在我添加它们时被场景复制和拥有。

问题是:哪种列表模板容器最适合实现我的外部列表。

我想他们需要是指针,所以我想boost::ptr_container。我知道一旦我开始删除项目,我需要一个系统来确保列表与场景同步。这意味着在从场景中移除对象之前从列表中移除指针。

关于我应该如何构建这个系统的任何想法都会非常好。

4

1 回答 1

1

你不需要它,Qt 为你做一切。

将项目添加到QGraphicsScene后,场景将拥有该项目的所有权。这意味着,场景现在负责存储项目,并在需要时释放项目占用的内存(通常在您使用 手动删除项目时deleteItem(),或者当场景本身被删除时)。

items()每当您需要时,您都可以通过调用该函数来询问已添加到场景中的所有项目的列表:

MyGraphicScene.items();

此函数将指向所有场景项目的指针列表作为 a 返回QList< QGraphicsItem * >,这正是您所需要的。

于 2012-09-19T10:19:43.140 回答