【问题标题】:QGraphicsView framework performance issue for large number of items大量项目的 QGraphicsView 框架性能问题
【发布时间】:2013-03-18 07:43:07
【问题描述】:

我在 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 编程技巧?请建议。我可以发布代码,或者如果以防万一请告诉我更多解释。提前致谢。

【问题讨论】:

  • 有没有办法降低 QPropertyAnimation 的帧率?这可能会有所帮助吗?
  • 一次可以看到多少个项目?尝试将视口更新设置为QGraphicsView::MinimalViewportUpdateQGraphicsView::SmartViewportUpdate

标签: qt qt5


【解决方案1】:

当您有很多项目时,瓶颈是当您同时在屏幕上显示许多项目时,这意味着它们相当小。在这种情况下,建议使用不同的 LOD - 这是细节级别。当项目很小时,画出它的简化版本。将其与 LOD 烘焙和缓存以及用于绘制的 OpenGL 小部件相结合,您可以轻松地一次获得数万甚至数十万个项目。

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 2016-03-09
    • 2011-11-16
    • 2013-02-09
    相关资源
    最近更新 更多