Qt 有效地为QGraphicsItem设置动画

Qt 有效地为QGraphicsItem设置动画,qt,animation,svg,qgraphicsitem,Qt,Animation,Svg,Qgraphicsitem,我有一个QGraphicsSvgItem,我需要根据进入我的应用程序的外部变量旋转一定数量。目前我正在直接设置项目的旋转属性,但这似乎显著降低了帧速率。(117.0 fps->98.0 fps)这正常吗?这是制作QGraphicsItem动画的正确方法吗?我意识到帧速率听起来很高,但我担心随着视图中的更多项目被设置动画,性能将成为一个问题 下面的代码是通过间隔为0的QTimer超时信号调用的 请注意,我还尝试使用带有自定义QPainterPath的QGraphicsItem而不是SVG来绘制项目

我有一个QGraphicsSvgItem,我需要根据进入我的应用程序的外部变量旋转一定数量。目前我正在直接设置项目的旋转属性,但这似乎显著降低了帧速率。(117.0 fps->98.0 fps)这正常吗?这是制作QGraphicsItem动画的正确方法吗?我意识到帧速率听起来很高,但我担心随着视图中的更多项目被设置动画,性能将成为一个问题

下面的代码是通过间隔为0的QTimer超时信号调用的

请注意,我还尝试使用带有自定义QPainterPath的QGraphicsItem而不是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();

在Qt中设置动画的更合适的方法是使用。它要求:

  • 您的图形项继承自
    QObject
    QGraphicsSvgItem
  • rotation
    已注册为的属性(getter和setter已经存在,因此不需要实现它们)
您还应该尝试调整图形项的缓存模式。似乎适合你的情况。还有视图缓存模式,但很难说哪种模式更适合您的情况

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