【问题标题】:c++ list of pointers to QGraphicsItemc++ 指向 QGraphicsItem 的指针列表
【发布时间】:2012-09-11 15:16:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ qt list pointers boost


    【解决方案1】:

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

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

    您可以随时通过调用items() 函数来询问已添加到场景中的所有项目的列表:

    MyGraphicScene.items();
    

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

    【讨论】:

    • 您好,感谢您的回答。是的,我知道我可以使用 items() 来获取所有项目。但是如果我需要得到所有的“正方形”或“老鼠”或其他什么。一个场景可以包含 1000 多个项目。假设我有一个带有盒子和圆圈的场景。如果我想更改所有框的大小,而不是圆圈的大小,该怎么办
    • @Artis,在这种情况下,QList 就可以了。实际上,QList 是大多数时候你应该选择的容器,除非你想要特殊的行为(比如在QMap 中按关键字搜索)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2018-07-28
    • 2011-04-24
    相关资源
    最近更新 更多