0

setFrameRange 方法(它是 QTimeLine 类的一部分)有什么用?我找到了这个例子:

QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20);

 QTimeLine *timer = new QTimeLine(5000);
 timer->setFrameRange(0, 100);

 QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
 animation->setItem(ball);
 animation->setTimeLine(timer);

 for (int i = 0; i < 200; ++i)
     animation->setPosAt(i / 200.0, QPointF(i, i));

 QGraphicsScene *scene = new QGraphicsScene();
 scene->setSceneRect(0, 0, 250, 250);
 scene->addItem(ball);

 QGraphicsView *view = new QGraphicsView(scene);
 view->show();

 timer->start();

显然,一切似乎都运行良好,但我注意到修改这个参数并没有改变任何事情。我试着这样写:

  • 计时器->setFrameRange(100, 100)
  • 计时器->setFrameRage(0,0)

但尽管我在做什么,结果仍然是一样的。

总结一下,我有两个问题。这个方法在做什么(是的,我已经阅读了文档),为什么我的修改没有改变任何东西?

4

1 回答 1

1

当您阅读文档时,您会注意到它声明它可以用于调用 currentFrame() 或 frameForTime()。因此,它设置了时间线与帧的关系。由于您没有调用这些函数中的任何一个,因此它什么也不做!

我猜想通过将帧设置为 0 到 100,这意味着在 2.5 秒处请求当前帧(时间线为 5000),你会得到 50,而将开始和结束帧设置为 0 - 50 ,您将返回 25。如果您有兴趣在达到特定帧时收到通知,这也将与调用 frameChanged(int frame) 有关。

总而言之,它允许在帧中引用动画,使用您想要使用的最小值和最大值之间的插值。

于 2013-05-09T16:35:12.873 回答