Qt WidgetsにおけるQGraphicsItemAnimation::timeLine()のサンプルコード


QGraphicsItemAnimation::timeLine() は、Qt WidgetsライブラリにおけるQGraphicsItemAnimationクラスのメソッドの一つです。このメソッドは、QGraphicsItemAnimationオブジェクトに関連付けられたQTimeLineオブジェクトを取得します。QTimeLineオブジェクトは、アニメーションの速度やタイミングを制御するために使用されます。

詳細

QGraphicsItemAnimationクラスは、QGraphicsItemオブジェクトのアニメーションを作成するために使用されます。QGraphicsItemオブジェクトは、2Dグラフィックスシーン内の可視要素を表します。QGraphicsItemAnimationオブジェクトは、QTimeLineオブジェクトを使用して、QGraphicsItemオブジェクトの変形マトリックスを時間経過とともに変化させることができます。

QTimeLineオブジェクトは、アニメーションのフレームレートや開始/終了時間を設定するために使用されます。QGraphicsItemAnimationオブジェクトは、QTimeLineオブジェクトのvalueChanged()シグナルをsetStep()スロットに接続することで、QTimeLineオブジェクトの値の変化に合わせてアニメーションを実行します。

QGraphicsItem *item = new QGraphicsEllipseItem(0, 0, 20, 20);
QTimeLine *timeline = new QTimeLine(5000);
timeline->setFrameRange(0, 100);
QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
animation->setItem(item);
animation->setTimeLine(timeline);
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(item);
QGraphicsView *view = new QGraphicsView(scene);
view->show();
timeline->start();

この例では、QGraphicsEllipseItemオブジェクトを回転させるアニメーションを作成します。QTimeLineオブジェクトは、5秒間にわたって100フレームのアニメーションを作成するように設定されています。QGraphicsItemAnimationオブジェクトは、QTimeLineオブジェクトとQGraphicsEllipseItemオブジェクトに関連付けられます。setPosAt()メソッドを使用して、QGraphicsEllipseItemオブジェクトの位置をアニメーションの各フレームで設定します。

timeLine()メソッドの使用例

timeLine()メソッドは、QGraphicsItemAnimationオブジェクトに関連付けられたQTimeLineオブジェクトを取得するために使用されます。このQTimeLineオブジェクトを使用して、アニメーションの速度やタイミングを制御することができます。

QGraphicsItemAnimation *animation = ...;
QTimeLine *timeline = animation->timeLine();
timeline->setDuration(2000);
timeline->start();

この例では、QGraphicsItemAnimationオブジェクトのtimeLine()メソッドを使用して、関連付けられたQTimeLineオブジェクトを取得します。次に、setDuration()メソッドを使用して、アニメーションの持続時間を2秒に設定します。最後に、start()メソッドを使用して、アニメーションを開始します。

QGraphicsItemAnimation::timeLine()メソッドは、QGraphicsItemAnimationオブジェクトに関連付けられたQTimeLineオブジェクトを取得するための重要なメソッドです。このQTimeLineオブジェクトを使用して、アニメーションの速度やタイミングを制御することができます。



例1:回転アニメーション

この例では、QGraphicsEllipseItemオブジェクトを回転させるアニメーションを作成します。

#include <QApplication>
#include <QGraphicsItemAnimation>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimeLine>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  // アニメーション対象の楕円形を作成
  QGraphicsEllipseItem *item = new QGraphicsEllipseItem(0, 0, 100, 100);

  // アニメーション時間を設定
  QTimeLine *timeline = new QTimeLine(4000);
  timeline->setFrameRange(0, 360);

  // アニメーションを作成
  QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
  animation->setItem(item);
  animation->setTimeLine(timeline);

  // 回転角度を設定
  for (int i = 0; i <= 360; ++i) {
    animation->setRotationAt(i / 360.0, i);
  }

  // シーンとビューを作成
  QGraphicsScene *scene = new QGraphicsScene;
  scene->setSceneRect(0, 0, 200, 200);
  scene->addItem(item);
  QGraphicsView *view = new QGraphicsView(scene);
  view->show();

  // アニメーションを開始
  timeline->start();

  return app.exec();
}

例2:移動アニメーション

#include <QApplication>
#include <QGraphicsItemAnimation>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimeLine>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  // アニメーション対象の楕円形を作成
  QGraphicsEllipseItem *item = new QGraphicsEllipseItem(0, 0, 100, 100);

  // アニメーション時間を設定
  QTimeLine *timeline = new QTimeLine(5000);
  timeline->setFrameRange(0, 200);

  // アニメーションを作成
  QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
  animation->setItem(item);
  animation->setTimeLine(timeline);

  // 移動距離を設定
  for (int i = 0; i <= 200; ++i) {
    animation->setPosAt(i / 200.0, QPointF(i, i));
  }

  // シーンとビューを作成
  QGraphicsScene *scene = new QGraphicsScene;
  scene->setSceneRect(0, 0, 300, 300);
  scene->addItem(item);
  QGraphicsView *view = new QGraphicsView(scene);
  view->show();

  // アニメーションを開始
  timeline->start();

  return app.exec();
}
#include <QApplication>
#include <QGraphicsItemAnimation>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimeLine>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  // アニメーション対象の楕円形を作成
  QGraphicsEllipseItem *item = new QGraphicsEllipseItem(0, 0, 100, 100);

  // アニメーション時間を設定
  QTimeLine *timeline = new QTimeLine(3000);
  timeline->setFrameRange(0, 100);

  // アニメーションを作成
  QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
  animation->setItem(item);
  animation->setTimeLine(timeline);

  // 拡大縮小率を設定
  for (int i = 0; i <= 100; ++i) {


animation()メソッド

animation()メソッドは、QGraphicsItemオブジェクトに関連付けられたすべてのアニメーションのリストを取得します。このリストには、QGraphicsItemAnimationオブジェクトだけでなく、QPropertyAnimationQVector3DAnimationなどの他の種類のアニメーションも含まれます。

QGraphicsItem *item = ...;
QList<QAbstractAnimation *> animations = item->animation();

この例では、itemオブジェクトに関連付けられたすべてのアニメーションのリストを取得します。その後、このリストをループして、各アニメーションの型をチェックし、QGraphicsItemAnimationオブジェクトである場合は、timeLine()メソッドを使用してQTimeLineオブジェクトを取得することができます。

setTimeline()メソッド

setTimeline()メソッドは、QGraphicsItemAnimationオブジェクトに関連付けられたQTimeLineオブジェクトを設定します。このメソッドを使用して、既存のQTimeLineオブジェクトをQGraphicsItemAnimationオブジェクトに関連付けたり、新しいQTimeLineオブジェクトを作成して関連付けたりすることができます。

QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
QTimeLine *timeline = new QTimeLine(5000);
timeline->setFrameRange(0, 100);
animation->setItem(item);
animation->setTimeLine(timeline);

この例では、新しいQTimeLineオブジェクトを作成し、QGraphicsItemAnimationオブジェクトに関連付けます。その後、QTimeLineオブジェクトのフレーム範囲と開始/終了時間を設定します。

QPropertyAnimationの使用

QGraphicsItemAnimationオブジェクトは、QGraphicsItemオブジェクトの変形マトリックスを時間経過とともに変化させるために使用されます。しかし、QGraphicsItemオブジェクトのプロパティを直接アニメーション化したい場合は、QPropertyAnimationオブジェクトを使用することができます。

QGraphicsEllipseItem *item = new QGraphicsEllipseItem(0, 0, 100, 100);
QPropertyAnimation *animation = new QPropertyAnimation(item, "x");
animation->setDuration(2000);
animation->setStartValue(0);
animation->setEndValue(200);
animation->start();

この例では、QGraphicsEllipseItemオブジェクトのx座標を2秒間にわたって0から200にアニメーション化します。

QVector3DAnimationの使用

QGraphicsItemオブジェクトを3D空間でアニメーション化したい場合は、QVector3DAnimationオブジェクトを使用することができます。

QGraphicsItem *item = new QGraphicsItem;
QVector3DAnimation *animation = new QVector3DAnimation(item);
animation->setDuration(2000);
animation->setStartValue(QVector3D(0, 0, 0));
animation->setEndValue(QVector3D(100, 100, 100));
animation->start();

この例では、QGraphicsItemオブジェクトを2秒間にわたって(0, 0, 0)から(100, 100, 100)にアニメーション化します。