1

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

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

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

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

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

任何帮助是极大的赞赏!

4

1 回答 1

4

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

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

于 2011-12-02T04:36:10.563 回答