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 |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QTimeLine ist Teil des Animation Frameworks.
Ö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) |
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.
Konstante | Wert | Beschreibung |
---|---|---|
QTimeLine::Forward | 0 | Die aktuelle Zeit der Zeitleiste nimmt mit der Zeit zu (d.h. sie bewegt sich von 0 und in Richtung Ende / Dauer). |
QTimeLine::Backward | 1 | Die 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.
Konstante | Wert | Beschreibung |
---|---|---|
QTimeLine::NotRunning | 0 | Die 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::Paused | 1 | Die Zeitleiste wird angehalten (d. h. vorübergehend ausgesetzt). Durch den Aufruf von setPaused(false) wird die Aktivität der Zeitleiste wieder aufgenommen. |
QTimeLine::Running | 2 | Die 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.