使用setFrameRange方法

时间:2013-05-09 15:48:01

标签: qt animation graphics

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();

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

  • timer-&gt; setFrameRange(100,100)
  • timer-&GT; setFrameRage(0,0)

但是尽管我正在做的事情,结果仍然是一样的。

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

1 个答案:

答案 0 :(得分:1)

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

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

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