我有一个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
或其他一些其他有名的数据结构中,并将它们保存在集中的位置。这样做的原因是,我会有一堆算法对这些三角形进行变换。由于这些三角形很多,我的算法应该是高效缓存的,数据结构应该易于迭代。
然后QGraphicsItems
或QGraphicsScene
需要保持此模型中三角形的指针/索引。场景中的Triangles
是动态的,可以移动/添加/删除(使用标准qt标记ItemIsSelectable
,ItemIsMoveable
)。问题是指向std::vector
的指针不能保证有效。
我认为将QGraphicsScene
变成QAbstractItemView
可能会很尴尬,因此我正在考虑制作自己的模型。但是我不太确定如何在内部存储三角形以及如何保持模型和场景同步。你会怎么做?