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

明らかにすべてがうまく機能しているように見えますが、このパラメーターを変更しても何も変わらないことに気付きました。私はこのようにsthを書こうとしました:

  • timer->setFrameRange(100, 100)
  • timer->setFrameRage(0,0)

しかし、私が何をしていても、結果は同じです。

すべてを要約すると、2 つの質問があります。このメソッドは何をしているのですか (そして、はい、私はドキュメントを読みました)、なぜ変更しても何も変わらないのですか?

4

1 に答える 1

1

ドキュメントを読むと、currentFrame() または frameForTime() の呼び出しに使用できることが記載されていることに気付くでしょう。そのため、タイムラインとフレームの関係を設定します。これらの関数のいずれも呼び出していないので、何もしていません!

フレームを 0 から 100 に設定すると、現在のフレームを 2.5 秒 (5000 のタイム ライン) で要求すると、50 が返され、開始フレームと終了フレームを 0 - 50 に設定すると推測できます。特定のフレームに到達したときに通知を受け取ることに関心がある場合、これは frameChanged(int frame) の呼び出しにも関連します。

要約すると、使用する最小値と最大値の間の補間を使用して、フレーム内のアニメーションを参照できます。

于 2013-05-09T16:35:12.873 に答える