有效地动画QGraphicsItem

时间:2015-05-07 13:31:23

标签: qt animation svg qgraphicsitem

我有一个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();

1 个答案:

答案 0 :(得分:0)

在Qt中制作动画的更合适的方法是使用QPropertyAnimation。它要求:

  • 您的图片项目继承自QObjectQGraphicsSvgItem;
  • rotation已注册为Q_PROPERTY的属性(已存在getter和setter,因此无需实现它们。)

此外,您应该尝试调整图形项的缓存模式。 ItemCoordinateCache似乎适合您的情况。还有查看缓存模式,但很难说哪种情况更好。

请注意,应使用程序应该能够处理的平均项目数来完成性能优化。优化单个项目渲染可能毫无意义。