我正在试验 QT 库和 QGraphicsScene
。
我可以将自己的对象添加到场景中,一切都很好。
我现在想要的是对象的 QGraphicsScene
之外的一些列表。
比方说正方形、圆形和三角形。
它们都存在于场景中,并且(如果我是正确的)在我添加它们时复制并归场景所有。
问题是:什么样的列表模板容器最适合实现我的外部列表。
我想它们需要是指针,所以我想到了 boost::ptr_container
。
我知道一旦我开始删除项目,我就需要一个系统来确保列表与场景同步。这意味着在从场景中移除对象之前从列表中移除指针。
任何关于我应该如何构建这个系统的想法都会非常好。
最佳答案
你不需要它,Qt 为你做了一切。
将项目添加到 QGraphicsScene
后,场景拥有该项目的所有权。这意味着,场景现在负责存储项目,并在需要时释放项目占用的内存(通常是当您使用 deleteItem()
手动删除项目时,或者场景本身被删除时)。
您可以随时通过调用 items()
请求已添加到场景中的所有项目的列表。功能:
MyGraphicScene.items();
此函数返回指向场景所有项目的指针列表,形式为 QList< QGraphicsItem * >
。 ,这正是您所需要的。
关于指向 QGraphicsItem 的指针的 c++ 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492582/