5

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

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循环?第二个例子是没有工作的错误还是我错过了什么?

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

4

3 回答 3

4

只需明确添加“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)
    }
  }
}
于 2014-04-19T16:34:07.813 回答
1

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

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

不过,我仍然对问题的答案感兴趣。

于 2011-04-29T22:36:26.593 回答
0

即使SmoothedAnimation不接受loops参数,您也可以将其放置在SequentialAnimation中并将循环应用于此外部覆盖。作为一种效果,您的平滑动画将连续播放。

于 2015-09-22T15:17:46.040 回答