Performance 对于QGraphicscene,在QGraphicsSitem上使用setZValue会导致严重减速

Performance 对于QGraphicscene,在QGraphicsSitem上使用setZValue会导致严重减速,performance,qt,qgraphicsview,qgraphicsscene,Performance,Qt,Qgraphicsview,Qgraphicsscene,我正在使用QGraphicsView和Qgraphicscene使用Qt(Mac,版本4.7)渲染一个相当大的场景(来自开放街道地图的地图数据)。在我尝试为场景中的项目设置Z值之前,一切都很正常。我尝试了两种不同的方法来实现这一点。第一,我只是: QGraphicsPathItem *item = scene->addPath(path, pen); item->setZValue(z); 另一个我创建了自己的QGraphicsItem子类,但遇到了完全相同的问题 减速的原因似乎是

我正在使用QGraphicsView和Qgraphicscene使用Qt(Mac,版本4.7)渲染一个相当大的场景(来自开放街道地图的地图数据)。在我尝试为场景中的项目设置Z值之前,一切都很正常。我尝试了两种不同的方法来实现这一点。第一,我只是:

QGraphicsPathItem *item = scene->addPath(path, pen);
item->setZValue(z);
另一个我创建了自己的QGraphicsItem子类,但遇到了完全相同的问题

减速的原因似乎是Qt方面的。一旦我设置了z值,场景就需要很长时间才能生成(在显示任何东西之前需要几分钟,我会得到旋转的海滩死亡球),但一旦生成,速度就会恢复正常。此外,当我试图关闭应用程序时,它会在关闭前挂起几分钟。如果我不使用z值,我就看不到任何这些问题,并且我添加了调试代码,以验证它没有出现在我自己的代码中

不幸的是,为了正确渲染街道,我需要设置z值(例如,道路周围的轮廓,使高速公路的阶数高于穿过街道的阶数,等等)

非常感谢您的帮助

您可以尝试设置为固定值。它控制场景中项目的定位方式。使用大量现有项目更改深度可能会非常昂贵

优化的另一个候选者是。将其设置为noIndex实际上可能会提高性能。

您可以尝试将其设置为固定值。它控制场景中项目的定位方式。使用大量现有项目更改深度可能会非常昂贵


优化的另一个候选者是。将其设置为noIndex实际上可能会提高性能。

itemIndexMethod的效果非常好。我尝试了几个bspTreeDepth值,但运气不太好。非常感谢。itemIndexMethod工作起来很有魅力。我尝试了几个bspTreeDepth值,但运气不太好。非常感谢。