缓存QGraphicsScene中项目的高效管理

时间:2015-09-18 16:51:06

标签: c++ qt data-structures model qgraphicsscene

我有一个QGraphicsScene,显示从QGraphicsItem继承的自定义对象。例如,我想显示如下组成的三角形:

struct Triangle {
    Point a;
    Point b;
    Point c;
};

QGraphicsItem看起来像这样:

class TriangleItem : public QGraphicsItem {
  public:
    Triange(QGraphicsItem* parent = 0);
    ...
  private:
    IndexTo _triangle;
};

但是,我不想直接将三角形存储在QGraphicsItem中,而是存储在std::vector或其他一些其他有名的数据结构中,并将它们保存在集中的位置。这样做的原因是,我会有一堆算法对这些三角形进行变换。由于这些三角形很多,我的算法应该是高效缓存的,数据结构应该易于迭代。

然后QGraphicsItemsQGraphicsScene需要保持此模型中三角形的指针/索引。场景中的Triangles是动态的,可以移动/添加/删除(使用标准qt标记ItemIsSelectableItemIsMoveable)。问题是指向std::vector的指针不能保证有效。

我认为将QGraphicsScene变成QAbstractItemView可能会很尴尬,因此我正在考虑制作自己的模型。但是我不太确定如何在内部存储三角形以及如何保持模型和场景同步。你会怎么做?

0 个答案:

没有答案