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
オブジェクトだけでなく、QPropertyAnimation
やQVector3DAnimation
などの他の種類のアニメーションも含まれます。
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)にアニメーション化します。