1

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

4

1 回答 1

3

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

于 2013-03-28T12:10:14.547 回答