QTimeLine Class

Die Klasse QTimeLine bietet eine Zeitleiste zur Steuerung von Animationen. Mehr...

Kopfzeile: #include <QTimeLine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Vererbungen: QObject

Öffentliche Typen

enum Direction { Forward, Backward }
enum State { NotRunning, Paused, Running }

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)

Reimplementierte geschützte Funktionen

virtual void timerEvent(QTimerEvent *event) override

Detaillierte Beschreibung

Es wird am häufigsten verwendet, um ein GUI-Steuerelement zu animieren, indem ein Slot periodisch aufgerufen wird. Sie können eine Zeitleiste konstruieren, indem Sie die Dauer in Millisekunden an den Konstruktor von QTimeLine übergeben. Die Dauer der Zeitleiste beschreibt, wie lange die Animation laufen wird. Dann legen Sie einen geeigneten Frame-Bereich fest, indem Sie setFrameRange() aufrufen. Schließlich verbinden Sie das Signal frameChanged() mit einem geeigneten Slot in dem Widget, das Sie animieren möchten (zum Beispiel setValue() in QProgressBar). Wenn Sie start() aufrufen, geht QTimeLine in den Zustand "Running" über und beginnt, frameChanged() in regelmäßigen Abständen auszusenden, so dass der Wert der verbundenen Eigenschaft Ihres Widgets vom unteren Ende zum oberen Ende des Frame-Bereichs in gleichmäßigem Rhythmus wächst. Sie können das Aktualisierungsintervall festlegen, indem Sie setUpdateInterval() aufrufen. Wenn dies geschehen ist, geht QTimeLine in den Zustand NotRunning über und sendet finished().

Beispiel:

...
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
pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, &QPushButton::clicked, timeLine, &QTimeLine::start);
...

Standardmäßig läuft die Zeitleiste einmal, von ihrem Anfang bis zu ihrem Ende, woraufhin Sie start() erneut aufrufen müssen, um vom Anfang an zu beginnen. Um die Zeitleiste in einer Schleife laufen zu lassen, können Sie setLoopCount() aufrufen und dabei die Anzahl der Durchläufe vor dem Ende der Zeitleiste angeben. Die Richtung kann auch geändert werden, so dass die Zeitleiste rückwärts läuft, indem Sie setDirection() aufrufen. Durch den Aufruf von setPaused() können Sie die Zeitleiste auch anhalten und wieder freigeben, während sie läuft. Für die interaktive Steuerung steht die Funktion setCurrentTime() zur Verfügung, die die Zeitposition der Zeitleiste direkt festlegt. Obwohl diese Funktion vor allem im Zustand NotRunning nützlich ist (z. B. in Verbindung mit einem valueChanged()-Signal in einem QSlider), kann sie jederzeit aufgerufen werden.

Die Frame-Schnittstelle ist nützlich für Standard-Widgets, aber QTimeLine kann zur Steuerung jeder Art von Animation verwendet werden. Das Herzstück von QTimeLine liegt in der Funktion valueForTime(), die einen Wert zwischen 0 und 1 für eine bestimmte Zeit erzeugt. Dieser Wert wird normalerweise 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 erzeugt QTimeLine Werte zwischen 0 und 1, indem es valueForTime() aufruft und valueChanged() ausgibt. Standardmäßig wendet valueForTime() einen Interpolationsalgorithmus an, um diese Werte zu erzeugen. Sie können aus einer Reihe von vordefinierten Algorithmen für die Zeitachse wählen, indem Sie setEasingCurve() aufrufen.

Beachten Sie, dass QTimeLine standardmäßig den Algorithmus QEasingCurve::InOutSine verwendet, der einen Wert liefert, der langsam, dann stetig und schließlich langsam wächst. 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 der Mitgliedstypen

enum QTimeLine::Direction

Diese Aufzählung beschreibt die Richtung der Zeitleiste im Zustand Running.

KonstanteWertBeschreibung
QTimeLine::Forward0Die aktuelle Zeit der Zeitleiste nimmt mit der Zeit zu (d.h. sie bewegt sich von 0 und in Richtung Ende / Dauer).
QTimeLine::Backward1Die aktuelle Zeit der Zeitleiste nimmt mit der Zeit ab (d.h. sie bewegt sich vom Ende / der Dauer weg und in Richtung 0).

Siehe auch setDirection().

enum QTimeLine::State

Diese Aufzählung beschreibt den Zustand der Zeitleiste.

KonstanteWertBeschreibung
QTimeLine::NotRunning0Die Zeitleiste ist nicht in Betrieb. Dies ist der Anfangszustand von QTimeLine und der Zustand, in den QTimeLine zurückkehrt, wenn es beendet ist. Die aktuelle Zeit, das aktuelle Bild und der aktuelle Wert bleiben unverändert, bis entweder setCurrentTime() aufgerufen wird oder die Zeitleiste durch den Aufruf von start() gestartet wird.
QTimeLine::Paused1Die Zeitleiste wird angehalten (d. h. vorübergehend ausgesetzt). Durch den Aufruf von setPaused(false) wird die Aktivität der Zeitleiste wieder aufgenommen.
QTimeLine::Running2Die Zeitleiste ist in Betrieb. Während sich die Steuerung in der Ereignisschleife befindet, aktualisiert QTimeLine die aktuelle Zeit in regelmäßigen Abständen und gibt valueChanged() und frameChanged() aus, wenn es angebracht ist.

Siehe auch state() und stateChanged().

Dokumentation der Eigenschaft

[bindable] currentTime : int

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält die aktuelle Zeit der Zeitleiste.

Wenn sich QTimeLine im Zustand "Running" befindet, wird dieser Wert kontinuierlich in Abhängigkeit von der Dauer und Richtung der Zeitleiste aktualisiert. Andernfalls ist es der Wert, der beim letzten Aufruf von stop() aktuell war, oder der Wert, der durch setCurrentTime() gesetzt wurde.

Hinweis: Sie können andere Eigenschaften an currentTime binden, aber es wird nicht empfohlen, Bindungen daran zu setzen. Wenn die Animation fortschreitet, wird die currentTime automatisch aktualisiert, was die Bindungen aufhebt.

Standardmäßig enthält diese Eigenschaft einen Wert von 0.

[bindable] direction : Direction

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft gibt die Richtung der Zeitachse an, wenn sich QTimeLine im Zustand Running befindet.

Die Richtung gibt an, ob sich die Zeit von 0 in Richtung der Dauer der Zeitleiste bewegt, oder vom Wert der Dauer und in Richtung 0, nachdem start() aufgerufen wurde.

Jede Bindung der Richtung wird nicht nur durch setDirection(), sondern auch durch toggleDirection() aufgehoben.

Standardmäßig ist diese Eigenschaft auf Forward gesetzt.

[bindable] duration : int

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält die Gesamtdauer der Zeitleiste in Millisekunden.

Standardmäßig ist dieser Wert 1000 (d. h. 1 Sekunde), aber Sie können ihn ändern, indem Sie entweder eine Dauer an den Konstruktor von QTimeLine übergeben oder setDuration() aufrufen. Die Dauer muss größer als 0 sein.

Hinweis: Das Ändern der Dauer bewirkt nicht, dass die aktuelle Zeit auf Null oder die neue Dauer zurückgesetzt wird. Sie müssen auch setCurrentTime() mit dem gewünschten Wert aufrufen.

[bindable] easingCurve : QEasingCurve

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Gibt die Lockerungskurve an, die in der Zeitleiste verwendet werden soll. Wenn valueForTime() neu implementiert wird, wird dieser Wert ignoriert.

Siehe auch valueForTime().

[bindable] loopCount : int

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft gibt die Anzahl der Schleifen an, die die Zeitleiste durchlaufen soll, bevor sie beendet wird.

Eine Schleifenanzahl von 0 bedeutet, dass die Zeitleiste eine Endlosschleife durchläuft.

Standardmäßig enthält diese Eigenschaft einen Wert von 1.

[bindable] updateInterval : int

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält die Zeit in Millisekunden zwischen jeder Aktualisierung der aktuellen Zeit durch QTimeLine.

Bei der Aktualisierung der aktuellen Zeit gibt QTimeLine valueChanged () aus, wenn sich der aktuelle Wert geändert hat, und frameChanged(), wenn sich der Rahmen geändert hat.

Standardmäßig beträgt das Intervall 40 ms, was einer Rate von 25 Aktualisierungen pro Sekunde entspricht.

Dokumentation der Mitgliedsfunktionen

[explicit] QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)

Konstruiert 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 Zeitlinie.

int QTimeLine::currentFrame() const

Gibt den Frame zurück, der der aktuellen Zeit entspricht.

Siehe auch currentTime(), frameForTime(), und setFrameRange().

qreal QTimeLine::currentValue() const

Gibt den Wert zurück, der der aktuellen Zeit entspricht.

Siehe auch valueForTime() und currentFrame().

int QTimeLine::endFrame() const

Gibt das Endframe zurück, d. h. das Frame, das dem Ende der Zeitleiste entspricht (d. h. das Frame, 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 der Zeitleiste erreicht), und läuft nicht in einer Schleife.

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.

[private signal] void QTimeLine::frameChanged(int frame)

QTimeLine sendet dieses Signal in regelmäßigen Abständen, wenn es sich im Zustand Running befindet, aber 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, aber nicht vom Benutzer ausgegeben werden.

Siehe auch QTimeLine::setFrameRange() und QTimeLine::updateInterval.

int QTimeLine::frameForTime(int msec) const

Gibt den Frame zurück, der der Zeit msec entspricht. Dieser Wert wird durch eine lineare Interpolation des Start- und Endbildes auf der Grundlage des von valueForTime() zurückgegebenen Wertes berechnet.

Siehe auch valueForTime() und setFrameRange().

[slot] void QTimeLine::resume()

Setzt die Zeitleiste ab der aktuellen Zeit fort. QTimeLine tritt wieder in den Zustand "Running" ein, und sobald es in die Ereignisschleife eintritt, aktualisiert es in regelmäßigen Abständen die aktuelle Zeit, das Bild und den Wert.

Im Gegensatz zu start() startet diese Funktion die Zeitleiste nicht neu, bevor sie fortgesetzt wird.

Siehe auch start(), updateInterval(), frameChanged(), und valueChanged().

void QTimeLine::setEndFrame(int frame)

Setzt den End-Frame, d.h. 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 Bildzähler der Zeitleiste so, dass er bei startFrame beginnt und bei endFrame endet. Für jeden Zeitwert findet QTimeLine das entsprechende Bild, wenn Sie currentFrame() oder frameForTime() aufrufen, indem es interpoliert und den Rückgabewert von valueForTime() verwendet.

Im Zustand "Running" gibt QTimeLine auch das Signal frameChanged() aus, wenn sich der Rahmen ä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 Pausenzustand übergeht. Es werden keine Aktualisierungen signalisiert, bis entweder start() oder setPaused(false) aufgerufen wird. Wenn paused falsch ist, wird die Zeitleiste wieder aufgenommen und macht dort weiter, wo sie aufgehört hat.

Siehe auch state() und start().

void QTimeLine::setStartFrame(int frame)

Setzt den Start-Frame, d.h. den Frame, der dem Beginn 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 geht in den Status "Laufend" über und aktualisiert nach Eintritt in die Ereignisschleife 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 an der Position 0 bzw. am Ende, wenn sie rückwärts läuft. Wenn Sie eine angehaltene Zeitleiste ohne Neustart wieder aufnehmen möchten, können Sie stattdessen resume() aufrufen.

Siehe auch resume(), updateInterval(), frameChanged(), und valueChanged().

int QTimeLine::startFrame() const

Gibt das Startbild zurück, d. h. das Bild, das dem Beginn der Zeitleiste entspricht (d. h. das Bild, für das der aktuelle Wert 0 ist).

Siehe auch setStartFrame() und setFrameRange().

QTimeLine::State QTimeLine::state() const

Gibt den Zustand der Zeitleiste zurück.

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

[private signal] void QTimeLine::stateChanged(QTimeLine::State newState)

Dieses Signal wird ausgegeben, wenn sich der Zustand von QTimeLine ändert. Der neue Zustand ist newState.

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.

[slot] void QTimeLine::stop()

Hält die Zeitleiste an, wodurch QTimeLine in den Zustand NotRunning wechselt.

Siehe auch start().

[override virtual protected] void QTimeLine::timerEvent(QTimerEvent *event)

Reimplements: QObject::timerEvent(QTimerEvent *event).

[slot] void QTimeLine::toggleDirection()

Schaltet die Richtung der Zeitleiste um. Wenn die Richtung vorwärts war, wird sie rückwärts und umgekehrt.

Vorhandene Bindungen von direction werden entfernt.

Siehe auch setDirection().

[private signal] void QTimeLine::valueChanged(qreal value)

QTimeLine sendet dieses Signal in regelmäßigen Abständen im Zustand Running, aber 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, aber nicht vom Benutzer ausgegeben werden.

Siehe auch QTimeLine::setDuration(), QTimeLine::valueForTime(), und QTimeLine::updateInterval.

[virtual] qreal QTimeLine::valueForTime(int msec) const

Gibt den Zeitleistenwert für die Zeit msec zurück. Der zurückgegebene Wert, der je nach Kurvenform variiert, liegt immer zwischen 0 und 1. Wenn msec 0 ist, gibt die Standardimplementierung immer 0 zurück.

Reimplementieren Sie diese Funktion, um eine benutzerdefinierte Kurvenform für Ihre Zeitleiste zu erstellen.

Siehe auch easingCurve und frameForTime().

© 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.