QGraphicsView框架对大量项目的性能问题

时间:2013-03-28 00:33:33

标签: qt qt5

我在windows中使用qt 5.0.1。我正在创建200k +自定义QGraphicsItem。我在这些自定义项目中添加了基本的功能主义,如鼠标悬停,鼠标点击等。这些项目是静态的。但除了这些项目之外,我还添加了一些动画(最大200个)动画(不同的属性动画,缩放,不透明度等)。 当我在场景中添加这些项目时,它会变得非常慢,在一个相对强大的工作站中。

QGraphicsScene *scene = new QGraphicsScene();
scene->setSceneRect(0, 0, width, height);
scene->setBackgroundBrush(Qt::darkGray);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);

QGraphicsView *view = new QGraphicsView( scene );
view->setRenderHint(QPainter::Antialiasing, false);
view->setResizeAnchor(QGraphicsView::AnchorViewCenter);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->resize( width, height );
view->setOptimizationFlags(QGraphicsView::DontSavePainterState);
view->setViewportUpdateMode( QGraphicsView::SmartViewportUpdate);
view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
view->setCacheMode(QGraphicsView::CacheBackground);
view->setViewportUpdateMode( QGraphicsView::FullViewportUpdate);
view->show();

我尝试了以下操作,但它使渲染视图非常糟糕,因为它似乎启用了抗锯齿,但我需要一些像素标签精度。

view->setViewport(new QGLWidget( QGLFormat(QGL::SampleBuffers))); 

我错过了一些重要的Qt编程技巧吗?请建议。我可以发布代码,或者解释更多,如果万一,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:3)

当你有很多物品时,瓶颈就是当你在屏幕上同时拥有它们时,这意味着它们相当小。在这种情况下,建议使用不同的LOD - 这是详细程度。当项目很小时,绘制它的简化版本。将它与LOD烘焙和缓存以及OpenGL小部件相结合,您可以轻松地同时获得数十甚至数十万件物品。