FrameAnimation QML Type

Löst bei jeder Aktualisierung eines Animationsbildes einen Handler aus. Mehr...

Import Statement: import QtQuick
Since: Qt 6.4

Eigenschaften

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 [read-only]

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 [read-only]

Diese Eigenschaft enthält die Zeit (in Sekunden) seit dem letzten Start.

Standardmäßig ist elapsedTime gleich 0.


frameTime : real [read-only]

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

Bei true wird die Frame-Animation angehalten, andernfalls wird sie fortgesetzt.

paused Der Standardwert ist false.

Siehe auch pause() und resume().


running : bool

Wenn auf true gesetzt, wird die Bildanimation gestartet, andernfalls gestoppt.

running Standardwert ist false.

Siehe auch stop(), start(), und restart().


smoothFrameTime : real [read-only]

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.