具有“速度”和无限“循环”的QML动画

时间:2011-04-29 14:13:11

标签: qt qml qt-quick

我正在尝试组合一个动画,我可以在其中指定速度(而不是持续时间)以及永久循环。我提出了两个不起作用的例子:

FirstTry.qml

import Qt 4.7

Rectangle {
  width: 100; height: 100
  Text {
    text: "hello"
    NumberAnimation on x {
      to: 50;
      loops: Animation.Infinite;
      duration: 50 * Math.abs(to - from)
    }
  }
}

hello在屏幕上疯狂时,我得到以下运行时警告(足够公平)。

QDeclarativeExpression: Expression "(function() { return 50 * Math.abs(to - from) })" depends on non-NOTIFYable properties: 
    QDeclarativeNumberAnimation::to
    QDeclarativeNumberAnimation::from

SecondTry.qml

import Qt 4.7

Rectangle {
  width: 100; height: 100
  Text {
    text: "hello"
    SmoothedAnimation on x {
      to: 50;
      loops: Animation.Infinite;
      velocity: 50
    }
  }
}

这更像是一种谜 - SmoothedAnimation只是拒绝循环!动画运行一次然后就是它。

所以我有以下问题:

在第一个例子中是否有合法的方法来指定速度?我理解SmoothedAnimation派生自NumberAnimation,所以也许它可能在QML中,而不仅仅是在C ++中。

有没有办法让SmoothedAnimation循环?第二个例子是不是在处理bug还是我遗漏了什么?

还有其他方法可以同时实现这两种行为吗?

3 个答案:

答案 0 :(得分:3)

只需明确添加“from”参数:

import Qt 4.7

Rectangle {
  width: 100; height: 100
  Text {
    text: "hello"
    NumberAnimation on x {
      from: 0;
      to: 50;
      loops: Animation.Infinite;
      duration: 50 * Math.abs(to - from)
    }
  }
}

答案 1 :(得分:1)

这就是我作为临时解决方案所做的,我不确定它是否足够,但它似乎正在做我需要的。

SmoothedAnimation on x {
  to: 50;
  //loops: Animation.Infinite;
  velocity: 50
  onComplete: { restart (); }
}

但我仍然对这些问题的答案感兴趣。

答案 2 :(得分:0)

即使 SmoothedAnimation 不接受循环参数,您也可以将其放在 SequentialAnimation 中并应用循环到这个外部封面。作为一种效果,您的平滑动画将连续播放。