多次显示 QGraphicsItem

Display a QGraphicsItem several times

我需要管理一个包含大量静态项目的场景,但有些项目是相同的,但坐标不同超过 10k。比如有一个圆,在场景中画了10k次

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

来做到这一点

is it possible to instanciate one object then place it 40000 times

不,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);
}