FrameAnimation QML Type
アニメーションのフレーム更新のたびにハンドラを実行します。詳細...
| Import Statement: | import QtQuick |
| Since: | Qt 6.4 |
プロパティ
- currentFrame : int
- elapsedTime : real
- frameTime : real
- paused : bool
- running : bool
- smoothFrameTime : real
信号
方法
詳細な説明
FrameAnimation を使用すると、アニメーションが進行し、アニメーションフレームがレンダリングされるたびにアクションをトリガーできます。スレッド化されたレンダリングループおよび基本的なレンダリングループに関する詳細については、シーングラフに関するドキュメントを参照してください。
一般的なアニメーションについては、NumberAnimation やその他のAnimation 要素を使用することを推奨します。これらは、アニメーションを宣言的に記述する方法を提供するからです。
一方、FrameAnimationは、カスタムな命令型アニメーションや、次のようなユースケースで使用すべきです:
- フレーム更新のたびにコードを実行する必要がある場合。あるいは、例えば、プログレッシブレンダリングを使用して、1フレームおきに実行する場合などです。
- アニメーションの途中で速度やターゲットが変化する場合、通常の QML アニメーションでは制限が大きすぎる場合があります。
- より正確なフレーム更新時間が必要な場合(例:fpsカウンターなど)。
interval 時間を設定できるTimer と比較して、FrameAnimationは常にアニメーションの更新と同期して実行されます。以下のようなカスタムアニメーションで短い間隔のTimer を使用している場合は、より滑らかなアニメーションを実現するために、代わりにFrameAnimationへの切り替えをご検討ください。
// BAD
Timer {
interval: 16
repeat: true
running: true
onTriggered: {
// Animate something
}
}
// GOOD
FrameAnimation {
running: true
onTriggered: {
// Animate something
}
}プロパティのドキュメント
currentFrame : int [read-only]
このプロパティには、開始以来のフレーム更新回数が格納されます。フレームアニメーションが再起動されると、currentFrame は `0` から開始されます。
以下の例は、フレーム更新に対してどのように反応するかを示しています。
FrameAnimation {
running: true
onTriggered: {
// Run code on every frame update.
}
}このプロパティは、nフレームごとにのみレンダリングを行う場合にも使用できます。UIに2つの処理負荷の高い要素が含まれており、全体として滑らかな60fpsのフレームレートを達成するために、これらの要素を30fpsでレンダリングし、1つ目を偶数フレームごとに、2つ目を奇数フレームごとにレンダリングするという高度な使用例を考えてみましょう:
FrameAnimation {
running: true
onTriggered: {
if (currentFrame % 2 == 0)
updateUIElement1();
else
updateUIElement2();
}
}デフォルトでは、frame は0です。
elapsedTime : real [read-only]
このプロパティは、前回の開始からの経過時間(秒単位)を保持します。
デフォルトでは、elapsedTime は0です。
frameTime : real [read-only]
このプロパティには、前回のフレーム更新からの経過時間(秒単位)が格納されます。
以下の例は、画面のリフレッシュレートやフレームレートの低下に対応しつつ、速度を変化させてアイテムをアニメーションさせるために `frameTime` を使用する方法を示しています。
Rectangle {
id: rect
property real speed: 90
width: 100
height: 100
color: "red"
anchors.centerIn: parent
}
FrameAnimation {
id: frameAnimation
running: true
onTriggered: {
// Rotate the item speed-degrees / second.
rect.rotation += rect.speed * frameTime
}
}デフォルトでは、frameTime の値は0です。
paused : bool
true に設定すると、フレームアニメーションを一時停止し、それ以外の場合は再開します。
paused デフォルトは false です。
pause() およびresume()も参照してください 。
running : bool
true に設定するとフレームアニメーションを開始し、それ以外の場合は停止します。
running デフォルトは false です。
stop()、start()、およびrestart()も参照してください 。
smoothFrameTime : real [read-only]
このプロパティには、前回のフレーム更新からの平滑化された経過時間(秒単位)が格納されます。
以下の例は、smoothFrameTime を使用して平均 fps を表示する方法を示しています。
Text {
text: "fps: " + frameAnimation.fps.toFixed(0)
}
FrameAnimation {
id: frameAnimation
property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0
running: true
}デフォルトでは、smoothFrameTime の値は0です。
シグナルのドキュメント
triggered()
このシグナルは、FrameAnimation が新しいフレームに進んだときに発せられます。
注: 対応するハンドラは `onTriggered` です。
メソッドのドキュメント
void pause()
フレームアニメーションを一時停止します。
フレームアニメーションがすでに一時停止されている場合、またはrunning ではない場合、このメソッドを呼び出しても何の効果もありません。pause() を呼び出した後、paused プロパティはtrueになります。
void reset()
フレームアニメーションのプロパティをリセットします。
このメソッドを呼び出すと、frame およびelapsedTime が初期値(0)にリセットされます。このメソッドは、running およびpaused プロパティには影響を与えず、これらが true または false の状態でも呼び出すことができます。
reset() とrestart() の呼び出しの違いは、reset() が常にプロパティを初期化するのに対し、restart() は次のフレーム更新時にのみプロパティを初期化する点にあります。例えば、restart() の直後にpause() が実行された場合など、フレーム更新が行われない状況では初期化されません。
void restart()
フレームアニメーションを再開します。
FrameAnimation が実行されていない場合は開始され、実行中の場合は停止された後、初期状態にリセットされてから開始されます。restart() を呼び出した後、running プロパティはtrueになります。
void resume()
一時停止中のフレームアニメーションを再開します。
フレームアニメーションが一時停止されていない場合、またはrunning ではない場合、このメソッドを呼び出しても何の効果もありません。resume() を呼び出した後、paused プロパティはfalseになります。
void start()
フレームアニメーションを開始します。
フレームアニメーションがすでに実行中の場合、このメソッドを呼び出しても何の効果もありません。start() を呼び出した後、running プロパティはtrueになります。
void stop()
フレームアニメーションを停止します。
フレームアニメーションが実行されていない場合、このメソッドを呼び出しても何の効果もありません。stop() を呼び出した後、running およびpaused のプロパティはどちらもfalseになります。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.