FrameAnimation QML Type
Löst bei jeder Aktualisierung eines Animationsbildes einen Handler aus. Mehr...
Import Statement: | import QtQuick |
Since: | Qt 6.4 |
Eigenschaften
- currentFrame : int
- elapsedTime : real
- frameTime : real
- paused : bool
- running : bool
- smoothFrameTime : real
Signale
Methoden
Detaillierte Beschreibung
Eine FrameAnimation kann verwendet werden, um jedes Mal eine Aktion auszulösen, wenn die Animationen fortgeschritten sind und ein Animationsframe gerendert wurde. In der Dokumentation zum Scene Graph finden Sie ausführliche Informationen zu den Threaded und Basic Render Loops.
Für allgemeine Animationen sollten Sie NumberAnimation
und andere Animation
Elemente verwenden, da diese eine deklarative Möglichkeit zur Beschreibung der Animationen bieten.
FrameAnimation hingegen sollte für benutzerdefinierte, zwingende Animationen und in Anwendungsfällen wie diesen verwendet werden:
- Wenn Sie bei jedem Frame-Update einen Code ausführen müssen. Oder z.B. jedes zweite Bild, vielleicht mit progressivem Rendering.
- Wenn sich die Geschwindigkeit / das Ziel während der Animation ändert, können normale QML-Animationen zu einschränkend sein.
- Wenn eine genauere Bildaktualisierungszeit benötigt wird, z.B. für den fps-Zähler.
Im Vergleich zu Timer
, wo die interval
Zeit eingestellt werden kann, läuft FrameAnimation immer synchron mit den Animations-Updates. Wenn Sie Timer
mit einem kurzen Intervall für benutzerdefinierte Animationen wie unten verwendet haben, ziehen Sie bitte in Betracht, stattdessen FrameAnimation zu verwenden, um flüssigere Animationen zu erhalten.
// BAD Timer { interval: 16 repeat: true running: true onTriggered: { // Animate something } } // GOOD FrameAnimation { running: true onTriggered: { // Animate something } }
Dokumentation der Eigenschaft
currentFrame : int |
Diese Eigenschaft enthält die Anzahl der Bildaktualisierungen seit dem Start. Wenn die Frame-Animation neu gestartet wird, beginnt currentFrame bei 0
.
Das folgende Beispiel zeigt, wie man auf Frame-Updates reagieren kann.
FrameAnimation { running: true onTriggered: { // Run code on every frame update. } }
Diese Eigenschaft kann auch verwendet werden, um nur jedes n-te Bild zu rendern. Betrachten Sie eine fortgeschrittene Anwendung, bei der die Benutzeroberfläche zwei schwere Elemente enthält, und um eine gleichmäßige Gesamtbildrate von 60 Bildern pro Sekunde zu erreichen, beschließen Sie, diese schweren Elemente mit 30 Bildern pro Sekunde zu rendern, das erste bei jedem geraden Bild und das zweite bei jedem ungeraden Bild:
FrameAnimation { running: true onTriggered: { if (currentFrame % 2 == 0) updateUIElement1(); else updateUIElement2(); } }
Standardmäßig ist frame
gleich 0.
elapsedTime : real |
Diese Eigenschaft enthält die Zeit (in Sekunden) seit dem letzten Start.
Standardmäßig ist elapsedTime
gleich 0.
frameTime : real |
Diese Eigenschaft enthält die Zeit (in Sekunden) seit der letzten Aktualisierung des Bildes.
Das folgende Beispiel zeigt, wie frameTime verwendet werden kann, um Elemente mit unterschiedlicher Geschwindigkeit zu animieren, wobei die Bildwiederholrate und mögliche fps-Einbrüche berücksichtigt werden.
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 } }
Standardmäßig ist frameTime
auf 0 gesetzt.
paused : bool |
running : bool |
smoothFrameTime : real |
Diese Eigenschaft enthält die geglättete Zeit (in Sekunden) seit der letzten Bildaktualisierung.
Das folgende Beispiel zeigt, wie smoothFrameTime verwendet werden kann, um die durchschnittlichen fps anzuzeigen.
Text { text: "fps: " + frameAnimation.fps.toFixed(0) } FrameAnimation { id: frameAnimation property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0 running: true }
Standardmäßig ist smoothFrameTime
gleich 0.
Signal Dokumentation
triggered() |
Dieses Signal wird ausgegeben, wenn FrameAnimation zu einem neuen Frame übergegangen ist.
Hinweis: Der entsprechende Handler ist onTriggered
.
Methode Dokumentation
pause() |
Pausiert die Frame-Animation
Wenn die Frame-Animation bereits pausiert oder nicht running
ist, hat der Aufruf dieser Methode keine Auswirkung. Die Eigenschaft paused
wird nach einem Aufruf von pause()
auf true gesetzt.
reset() |
Setzt die Eigenschaften der Rahmenanimation zurück
Der Aufruf dieser Methode setzt die Eigenschaften frame
und elapsedTime
auf ihre Anfangswerte (0) zurück. Diese Methode hat keine Auswirkung auf die Eigenschaften running
oder paused
und kann aufgerufen werden, während sie wahr oder falsch sind.
Der Unterschied zwischen dem Aufruf von reset()
und restart()
besteht darin, dass reset()
die Eigenschaften immer initialisiert, während restart()
sie nur beim nächsten Frame-Update initialisiert, was z.B. nicht geschieht, wenn restart()
unmittelbar von pause()
gefolgt wird.
restart() |
Neustart der Frame-Animation
Wenn FrameAnimation nicht läuft, wird sie gestartet, andernfalls wird sie angehalten, auf den Ausgangszustand zurückgesetzt und gestartet. Die Eigenschaft running
wird nach einem Aufruf von restart()
auf true gesetzt.
resume() |
Setzt eine angehaltene Bildanimation fort
Wenn die Frame-Animation nicht pausiert oder nicht running
ist, hat der Aufruf dieser Methode keine Auswirkung. Die Eigenschaft paused
wird nach einem Aufruf von resume()
auf false gesetzt.
start() |
Startet die Bildanimation
Wenn die Rahmenanimation bereits läuft, hat der Aufruf dieser Methode keine Auswirkung. Die Eigenschaft running
wird nach einem Aufruf von start()
auf true gesetzt.
stop() |
Stoppt die Bildanimation
Wenn die Frame-Animation nicht läuft, hat der Aufruf dieser Methode keine Auswirkung. Die beiden Eigenschaften running
und paused
werden nach einem Aufruf von stop()
auf false gesetzt.
© 2025 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.