对于QGraphicsScene,在QGraphicsItem上使用setZValue会导致主要的减速

时间:2011-12-01 20:30:08

标签: performance qt qgraphicsview qgraphicsscene

我正在使用Qt(Mac,版本4.7)使用QGraphicsView和QGraphicsScene渲染相当大的场景(来自Open Street Maps的地图数据)。一切都很好,直到我尝试为场景中的项目设置Z值。我尝试过两种不同的方法来做到这一点。在一个,我只是做:

QGraphicsPathItem *item = scene->addPath(path, pen);
item->setZValue(z);

另一个我创建自己的QGraphicsItem子类,但得到完全相同的问题。

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

不幸的是,我需要设置z值才能正确渲染街道(例如道路周围的轮廓,使高速公路的顺序高于通过街道等)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

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

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