多次显示QGraphicsItem

时间:2015-10-29 10:21:46

标签: qt qgraphicsview qgraphicsitem qgraphicsscene

我需要管理一个具有大量静态项目的场景,但是一些项目将是相同的但是在10k +不同的坐标。例如,有一个圆圈,但在场景中绘制了10k次。

我找到的唯一解决方案是为同一个视口使用2个场景,这显然不是我需要的解决方案,因为我需要很多简单的对象。 可以使用QGraphicsScene / QgraphicView做到这一点吗?

1 个答案:

答案 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);
}
相关问题