QTimeLine Class
Die Klasse „QTimeLine“ stellt eine Zeitleiste zur Steuerung von Animationen bereit. Mehr...
| Header: | #include <QTimeLine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QTimeLine ist Teil des Animation Framework.
Öffentliche Typen
Eigenschaften
|
|
Öffentliche Funktionen
| QTimeLine(int duration = 1000, QObject *parent = nullptr) | |
| virtual | ~QTimeLine() |
| QBindable<int> | bindableCurrentTime() |
| QBindable<QTimeLine::Direction> | bindableDirection() |
| QBindable<int> | bindableDuration() |
| QBindable<QEasingCurve> | bindableEasingCurve() |
| QBindable<int> | bindableLoopCount() |
| QBindable<int> | bindableUpdateInterval() |
| int | currentFrame() const |
| int | currentTime() const |
| qreal | currentValue() const |
| QTimeLine::Direction | direction() const |
| int | duration() const |
| QEasingCurve | easingCurve() const |
| int | endFrame() const |
| int | frameForTime(int msec) const |
| int | loopCount() const |
| void | setDirection(QTimeLine::Direction direction) |
| void | setDuration(int duration) |
| void | setEasingCurve(const QEasingCurve &curve) |
| void | setEndFrame(int frame) |
| void | setFrameRange(int startFrame, int endFrame) |
| void | setLoopCount(int count) |
| void | setStartFrame(int frame) |
| void | setUpdateInterval(int interval) |
| int | startFrame() const |
| QTimeLine::State | state() const |
| int | updateInterval() const |
| virtual qreal | valueForTime(int msec) const |
Öffentliche Slots
| void | resume() |
| void | setCurrentTime(int msec) |
| void | setPaused(bool paused) |
| void | start() |
| void | stop() |
| void | toggleDirection() |
Signale
| void | finished() |
| void | frameChanged(int frame) |
| void | stateChanged(QTimeLine::State newState) |
| void | valueChanged(qreal value) |
Neu implementierte geschützte Funktionen
| virtual void | timerEvent(QTimerEvent *event) override |
Detaillierte Beschreibung
Am häufigsten wird sie verwendet, um ein GUI-Steuerelement durch periodischen Aufruf eines Slots zu animieren. Sie können eine Zeitleiste erstellen, indem Sie deren Dauer in Millisekunden an den Konstruktor von `QTimeLine` übergeben. Die Dauer der Zeitleiste gibt an, wie lange die Animation laufen soll. Anschließend legen Sie einen geeigneten Frame-Bereich fest, indem Sie ` setFrameRange()` aufrufen. Verbinden Sie schließlich das Signal ` frameChanged()` mit einem geeigneten Slot in dem Widget, das Sie animieren möchten (zum Beispiel ` setValue()` in ` QProgressBar`). Wenn Sie anschließend start() aufrufen, wechselt QTimeLine in den Zustand „Running“ und beginnt, in regelmäßigen Abständen frameChanged() auszugeben, wodurch der Wert der verbundenen Eigenschaft Ihres Widgets mit konstanter Geschwindigkeit vom unteren zum oberen Ende Ihres Bildbereichs ansteigt. Sie können das Aktualisierungsintervall festlegen, indem Sie ` setUpdateInterval()` aufrufen. Anschließend wechselt QTimeLine in den Zustand „ NotRunning “ und sendet ` finished()` aus.
Beispiel:
//...
auto progressBar = new QProgressBar(this);
progressBar->setRange(0, 100);
// Construct a 1-second timeline with a frame range of 0 - 100
QTimeLine *timeLine = new QTimeLine(1000, this);
timeLine->setFrameRange(0, 100);
connect(timeLine, &QTimeLine::frameChanged, progressBar, &QProgressBar::setValue);
// Clicking the push button will start the progress bar animation
auto pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, &QPushButton::clicked, timeLine, &QTimeLine::start);
//...Standardmäßig läuft die Zeitleiste einmalig vom Anfang bis zum Ende. Anschließend müssen Sie „ start()“ erneut aufrufen, um den Vorgang von vorne zu starten. Um die Zeitleiste in einer Schleife laufen zu lassen, können Sie „ setLoopCount()“ aufrufen und dabei die Anzahl der Durchläufe angeben, die die Zeitleiste vor dem Beenden ausführen soll. Die Laufrichtung kann ebenfalls geändert werden, sodass die Zeitleiste rückwärts läuft, indem Sie „ setDirection()“ aufrufen. Sie können die Zeitleiste während der Wiedergabe auch anhalten und fortsetzen, indem Sie ` setPaused()` aufrufen. Für die interaktive Steuerung steht die Funktion ` setCurrentTime()` zur Verfügung, die die Zeitposition der Zeitleiste direkt festlegt. Obwohl diese Funktion im Status ` NotRunning ` am nützlichsten ist (z. B. bei Verbindung mit einem ` valueChanged()`-Signal in einem ` QSlider`), kann sie jederzeit aufgerufen werden.
Die Frame-Schnittstelle ist für Standard-Widgets nützlich, aber QTimeLine kann zur Steuerung jeder Art von Animation verwendet werden. Das Herzstück von QTimeLine ist die Funktion „ valueForTime()“, die für einen bestimmten Zeitpunkt einen Wert zwischen 0 und 1 generiert. Dieser Wert wird typischerweise verwendet, um die Schritte einer Animation zu beschreiben, wobei 0 der erste Schritt einer Animation und 1 der letzte Schritt ist. Während der Ausführung generiert QTimeLine Werte zwischen 0 und 1, indem es „ valueForTime()“ aufruft und „ valueChanged()“ ausgibt. Standardmäßig wendet „ valueForTime()“ einen Interpolationsalgorithmus an, um diese Werte zu generieren. Sie können aus einer Reihe vordefinierter Zeitachsenalgorithmen wählen, indem Sie „ setEasingCurve()“ aufrufen.
Beachten Sie, dass QTimeLine standardmäßig QEasingCurve::InOutSine verwendet, das einen Wert liefert, der zunächst langsam, dann stetig und schließlich wieder langsam ansteigt. Für eine benutzerdefinierte Zeitleiste können Sie valueForTime() neu implementieren; in diesem Fall wird die Eigenschaft easingCurve von QTimeLine ignoriert.
Siehe auch „ QProgressBar “ und „ QProgressDialog “.
Dokumentation zu Mitgliedstypen
enum QTimeLine::Direction
Diese Enumeration beschreibt die Richtung der Zeitleiste im Zustand „ Running “.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTimeLine::Forward | 0 | Die aktuelle Zeit der Zeitleiste nimmt mit der Zeit zu (d. h., sie bewegt sich von 0 aus in Richtung des Endes bzw. der Dauer). |
QTimeLine::Backward | 1 | Die aktuelle Zeit der Zeitleiste nimmt mit der Zeit ab (d. h., sie bewegt sich vom Ende bzw. der Dauer in Richtung 0). |
Siehe auch „ setDirection()“.
enum QTimeLine::State
Diese Enumeration beschreibt den Zustand der Zeitleiste.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTimeLine::NotRunning | 0 | Die Zeitleiste läuft nicht. Dies ist der Anfangszustand von „ QTimeLine “, und der Zustand „ QTimeLine “ wird nach Abschluss des Vorgangs wieder aufgenommen. Die aktuelle Zeit, der Frame und der Wert bleiben unverändert, bis entweder „ setCurrentTime()“ aufgerufen wird oder die Zeitleiste durch Aufruf von „ start()“ gestartet wird. |
QTimeLine::Paused | 1 | Die Zeitleiste ist angehalten (d. h., vorübergehend unterbrochen). Durch den Aufruf von ` setPaused(false)` wird die Aktivität der Zeitleiste fortgesetzt. |
QTimeLine::Running | 2 | Die Zeitleiste läuft. Solange sich die Steuerung in der Ereignisschleife befindet, aktualisiert „ QTimeLine “ in regelmäßigen Abständen die aktuelle Zeit und löst gegebenenfalls „ valueChanged()“ und „ frameChanged()“ aus. |
Siehe auch „ state()“ und „ stateChanged()“.
Dokumentation zu den Eigenschaften
[bindable] currentTime : int
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft enthält die aktuelle Zeit der Zeitleiste.
Befindet sich „ QTimeLine “ im Status „Running“, wird dieser Wert kontinuierlich in Abhängigkeit von der Dauer und Richtung der Zeitleiste aktualisiert. Andernfalls entspricht er dem Wert, der beim letzten Aufruf von „ stop()“ aktuell war, oder dem durch „setCurrentTime()“ festgelegten Wert.
Hinweis: Sie können andere Eigenschaften an „currentTime“ binden, es wird jedoch nicht empfohlen, Bindungen daran festzulegen. Im Verlauf der Animation wird „currentTime“ automatisch aktualisiert, wodurch die Bindungen aufgehoben werden.
Standardmäßig enthält diese Eigenschaft den Wert 0.
Zugriffsfunktionen:
| int | currentTime() const |
| void | setCurrentTime(int msec) |
[bindable] direction : Direction
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft gibt die Richtung der Zeitleiste an, wenn sich „ QTimeLine “ im Zustand „ Running “ befindet.
Diese Richtung gibt an, ob die Zeit nach dem Aufruf von ` start()` von 0 in Richtung der Timeline-Dauer verläuft oder vom Wert der Dauer in Richtung 0.
Jede Bindung der Richtung wird nicht nur durch „setDirection()“, sondern auch durch „ toggleDirection()“ entfernt.
Standardmäßig ist diese Eigenschaft auf „ Forward “ gesetzt.
Zugriffsfunktionen:
| QTimeLine::Direction | direction() const |
| void | setDirection(QTimeLine::Direction direction) |
[bindable] duration : int
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft enthält die Gesamtdauer der Zeitleiste in Millisekunden.
Standardmäßig beträgt dieser Wert 1000 (d. h. 1 Sekunde), Sie können ihn jedoch ändern, indem Sie entweder eine Dauer an den Konstruktor von ` QTimeLine` übergeben oder die Methode `setDuration()` aufrufen. Die Dauer muss größer als 0 sein.
Hinweis: Durch das Ändern der Dauer wird die aktuelle Zeit nicht auf Null oder die neue Dauer zurückgesetzt. Sie müssen außerdem ` setCurrentTime()` mit dem gewünschten Wert aufrufen.
Zugriffsfunktionen:
| int | duration() const |
| void | setDuration(int duration) |
[bindable] easingCurve : QEasingCurve
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Legt die Easing-Kurve fest, die die Zeitleiste verwenden soll. Wenn „ valueForTime()“ neu implementiert wird, wird dieser Wert ignoriert.
Zugriffsfunktionen:
| QEasingCurve | easingCurve() const |
| void | setEasingCurve(const QEasingCurve &curve) |
Siehe auch ` valueForTime()`.
[bindable] loopCount : int
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft gibt an, wie oft die Zeitleiste wiederholt werden soll, bevor sie endet.
Eine Schleifenanzahl von 0 bedeutet, dass die Zeitleiste endlos wiederholt wird.
Standardmäßig enthält diese Eigenschaft den Wert 1.
Zugriffsfunktionen:
| int | loopCount() const |
| void | setLoopCount(int count) |
[bindable] updateInterval : int
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft enthält die Zeit in Millisekunden zwischen den einzelnen Aktualisierungen der aktuellen Zeit durch „ QTimeLine “.
Bei der Aktualisierung der aktuellen Zeit löst „ QTimeLine “ die Ereignisse „ valueChanged()“ aus, wenn sich der aktuelle Wert geändert hat, und „ frameChanged()“, wenn sich der Frame geändert hat.
Standardmäßig beträgt das Intervall 40 ms, was einer Rate von 25 Aktualisierungen pro Sekunde entspricht.
Zugriffsfunktionen:
| int | updateInterval() const |
| void | setUpdateInterval(int interval) |
Dokumentation zu den Mitgliedsfunktionen
[explicit] QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)
Erstellt eine Zeitleiste mit einer Dauer von duration Millisekunden. parent wird an den Konstruktor von QObject übergeben. Die Standarddauer beträgt 1000 Millisekunden.
[virtual noexcept] QTimeLine::~QTimeLine()
Zerstört die Zeitleiste.
int QTimeLine::currentFrame() const
Gibt den Frame zurück, der dem aktuellen Zeitpunkt entspricht.
Siehe auch currentTime(), frameForTime() und setFrameRange().
qreal QTimeLine::currentValue() const
Gibt den Wert zurück, der der aktuellen Uhrzeit entspricht.
Siehe auch valueForTime() und currentFrame().
int QTimeLine::endFrame() const
Gibt das Endbild zurück, d. h. das Bild, das dem Ende der Zeitachse entspricht (d. h. das Bild, für das der aktuelle Wert 1 ist).
Siehe auch setEndFrame() und setFrameRange().
[private signal] void QTimeLine::finished()
Dieses Signal wird ausgegeben, wenn „ QTimeLine “ beendet ist (d. h. das Ende seiner Zeitleiste erreicht hat), und wird nicht wiederholt.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
[private signal] void QTimeLine::frameChanged(int frame)
QTimeLine sendet dieses Signal im Zustand „ Running “ in regelmäßigen Abständen, jedoch nur, wenn sich der aktuelle Frame ändert. „ frame “ ist die aktuelle Frame-Nummer.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch „ QTimeLine::setFrameRange()“ und „ QTimeLine::updateInterval “.
int QTimeLine::frameForTime(int msec) const
Gibt den Frame zurück, der dem Zeit msec entspricht. Dieser Wert wird anhand einer linearen Interpolation des Start- und End-Frames berechnet, basierend auf dem von valueForTime() zurückgegebenen Wert.
Siehe auch valueForTime() und setFrameRange().
[slot] void QTimeLine::resume()
Setzt die Zeitleiste ab dem aktuellen Zeitpunkt fort. „ QTimeLine “ wechselt wieder in den Status „Running“ und aktualisiert, sobald es in die Ereignisschleife eintritt, in regelmäßigen Abständen die aktuelle Zeit, den Frame und den Wert.
Im Gegensatz zu ` start()` startet diese Funktion die Zeitleiste vor der Fortsetzung nicht neu.
Siehe auch „ start()“, „ updateInterval()“, „ frameChanged()“ und „ valueChanged()“.
void QTimeLine::setEndFrame(int frame)
Setzt den Endframe – also den Frame, der dem Ende der Zeitleiste entspricht (d. h. den Frame, für den der aktuelle Wert 1 ist) – auf „ frame “.
Siehe auch „ endFrame()“, „ startFrame()“ und „ setFrameRange()“.
void QTimeLine::setFrameRange(int startFrame, int endFrame)
Setzt den Frame-Zähler der Zeitleiste so, dass er bei startFrame beginnt und bei endFrame endet. Für jeden Zeitwert ermittelt QTimeLine den entsprechenden Frame, wenn Sie currentFrame() oder frameForTime() aufrufen, und zwar durch Interpolation unter Verwendung des Rückgabewerts von valueForTime().
Im Status „Running“ sendet QTimeLine außerdem das Signal „ frameChanged()“, wenn sich der Frame ändert.
Siehe auch startFrame(), endFrame(), start() und currentFrame().
[slot] void QTimeLine::setPaused(bool paused)
Wenn „ paused “ wahr ist, wird die Zeitleiste angehalten, wodurch „ QTimeLine “ in den Status „Paused“ wechselt. Es werden keine Aktualisierungen gemeldet, bis entweder „ start()“ oder „setPaused(false)“ aufgerufen wird. Wenn „ paused “ falsch ist, wird die Zeitleiste fortgesetzt und läuft dort weiter, wo sie unterbrochen wurde.
Siehe auch „ state()“ und „ start()“.
void QTimeLine::setStartFrame(int frame)
Setzt den Startframe – also den Frame, der dem Anfang der Zeitleiste entspricht (d. h. den Frame, für den der aktuelle Wert 0 ist) – auf frame.
Siehe auch startFrame(), endFrame() und setFrameRange().
[slot] void QTimeLine::start()
Startet die Zeitleiste. „ QTimeLine “ wechselt in den Status „Running“ und aktualisiert, sobald es in die Ereignisschleife eintritt, in regelmäßigen Abständen die aktuelle Zeit, den Frame und den Wert. Das Standardintervall beträgt 40 ms (d. h. 25 Mal pro Sekunde). Sie können das Aktualisierungsintervall ändern, indem Sie „ setUpdateInterval()“ aufrufen.
Die Zeitleiste beginnt bei Position 0 oder, bei Rücklauf, am Ende. Wenn Sie eine angehaltene Zeitleiste fortsetzen möchten, ohne sie neu zu starten, können Sie stattdessen resume() aufrufen.
Siehe auch resume(), updateInterval(), frameChanged() und valueChanged().
int QTimeLine::startFrame() const
Gibt den Start-Frame zurück, d. h. den Frame, der dem Anfang der Zeitleiste entspricht (d. h. den Frame, für den der aktuelle Wert 0 ist).
Siehe auch setStartFrame() und setFrameRange().
QTimeLine::State QTimeLine::state() const
Gibt den Status der Zeitleiste zurück.
Siehe auch „ start()“, „ setPaused()“ und „ stop()“.
[private signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Dieses Signal wird immer dann ausgelöst, wenn sich der Zustand von ` QTimeLine` ändert. Der neue Zustand ist ` newState`.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
[slot] void QTimeLine::stop()
Hält die Zeitleiste an, wodurch „ QTimeLine “ in den Status „ NotRunning “ wechselt.
Siehe auch start().
[override virtual protected] void QTimeLine::timerEvent(QTimerEvent *event)
Implementiert: ` QObject::timerEvent(QTimerEvent *event)`.
[slot] void QTimeLine::toggleDirection()
Schaltet die Richtung der Zeitleiste um. Wenn die Richtung „Vorwärts“ war, wird sie zu „Rückwärts“ und umgekehrt.
Bestehende Zuordnungen von „ direction “ werden entfernt.
Siehe auch „ setDirection()“.
[private signal] void QTimeLine::valueChanged(qreal value)
QTimeLine sendet dieses Signal in regelmäßigen Abständen, wenn es sich im Zustand „ Running “ befindet, jedoch nur, wenn sich der aktuelle Wert ändert. „ value “ ist der aktuelle Wert. „ value “ ist eine Zahl zwischen 0,0 und 1,0
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, darf jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch „ QTimeLine::setDuration()“, „ QTimeLine::valueForTime()“ und „ QTimeLine::updateInterval “.
[virtual] qreal QTimeLine::valueForTime(int msec) const
Gibt den Zeitachsenwert für den Zeit msec zurück. Der zurückgegebene Wert, der je nach Kurvenform variiert, liegt immer zwischen 0 und 1. Wenn msec gleich 0 ist, gibt die Standardimplementierung immer 0 zurück.
Implementieren Sie diese Funktion neu, um eine benutzerdefinierte Kurvenform für Ihre Zeitleiste bereitzustellen.
Siehe auch ` easingCurve ` und ` frameForTime()`.
© 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.