我有一个QGraphicsSvgItem,我需要根据进入我的应用程序的外部变量旋转一定量。目前我正在直接设置项目的旋转属性,但这似乎会显着降低我的帧速率。 (117.0 fps - > 98.0 fps)这是正常的吗?这是动画QGraphicsItem的正确方法吗?我意识到帧速率听起来很高,但是我担心随着视图中的更多项目被动画化,性能将成为一个问题。
以下代码通过QTimer超时信号以0为间隔进行调用。
请注意,我还尝试将QGraphicsItem与自定义QPainterPath一起使用来绘制项目而不是SVG,并且没有明显的性能差异。
qreal diff = m_rope_length_ft[0] - m_rope_length_ft_prev[0];
qreal angle = diff * 5.0;
m_rope_reel[0]->setRotation(m_rope_reel[0]->rotation() + angle);
m_rope_reel[1]->setRotation(m_rope_reel[1]->rotation() + angle);
m_rope_reel[0]->update();
m_rope_reel[1]->update();
答案 0 :(得分:0)
在Qt中制作动画的更合适的方法是使用QPropertyAnimation。它要求:
QObject
和QGraphicsSvgItem
; rotation
已注册为Q_PROPERTY的属性(已存在getter和setter,因此无需实现它们。)此外,您应该尝试调整图形项的缓存模式。 ItemCoordinateCache似乎适合您的情况。还有查看缓存模式,但很难说哪种情况更好。
请注意,应使用程序应该能够处理的平均项目数来完成性能优化。优化单个项目渲染可能毫无意义。