【发布时间】: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::MinimalViewportUpdate或QGraphicsView::SmartViewportUpdate。