我需要管理一个具有大量静态项目的场景,但是一些项目将是相同的但是在10k +不同的坐标。例如,有一个圆圈,但在场景中绘制了10k次。
我找到的唯一解决方案是为同一个视口使用2个场景,这显然不是我需要的解决方案,因为我需要很多简单的对象。 可以使用QGraphicsScene / QgraphicView做到这一点吗?
答案 0 :(得分:1)
是否可以实例化一个物体然后放置40000次
不,Qt并不像这样工作。这就像问你是否可以同时在两个地方一样。
Qt旨在提高效率,因此如果您有多个对象,例如具有相同资源图像的QGraphicsPixmapItem,则可以对所有项使用相同的图像。但是,项目一次只能在场景中的一个位置。
因此,对于绘制10000次的圆形,您可以创建10000个图形项目,所有图形项目都使用相同的QPixmap资源,即圆形。但是,您仍然需要创建10000个项目,因为每个项目必须在某处存储其坐标和方向;那就是QGraphicsItem。
假设我们已经使用圆圈实例化了一个QPixmap项目:
QPixmap* pCircle = new QPixmap(":/images/circle"); // circle from the resource system
我们现在可以在不同位置创建10000个项目,每个项目都使用该圈子:
for(int i = 0; i<10000; ++i)
{
QGraphicsPixmapItem* pItem = new QGraphicsPixmapItem(*pCircle);
// set its position and add it to the scene
pItem->setPos(x, y);
m_pScene->addItem(pItem);
}