QStateMachine Class
Die Klasse „QStateMachine“ stellt eine hierarchische endliche Zustandsmaschine bereit. Mehr...
| Header: | #include <QStateMachine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS StateMachine) target_link_libraries(mytarget PRIVATE Qt6::StateMachine) |
| qmake: | QT += statemachine |
| Erbt von: | QState |
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Hinweis: Diese Funktionen sind zudem threadsicher:
- postEvent(QEvent *event, QStateMachine::EventPriority priority)
- postDelayedEvent(QEvent *event, int delay)
- cancelDelayedEvent(int id)
- postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
Öffentliche Typen
| class | SignalEvent |
| class | WrappedEvent |
| enum | Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError } |
| enum | EventPriority { NormalPriority, HighPriority } |
Eigenschaften
- animated : bool
- errorString : QString
- globalRestorePolicy : QState::RestorePolicy
- running : bool
Öffentliche Funktionen
| QStateMachine(QObject *parent = nullptr) | |
| virtual | ~QStateMachine() |
| void | addDefaultAnimation(QAbstractAnimation *animation) |
| void | addState(QAbstractState *state) |
| QBindable<bool> | bindableAnimated() |
| QBindable<QString> | bindableErrorString() const |
| QBindable<QState::RestorePolicy> | bindableGlobalRestorePolicy() |
| bool | cancelDelayedEvent(int id) |
| void | clearError() |
| QSet<QAbstractState *> | configuration() const |
| QList<QAbstractAnimation *> | defaultAnimations() const |
| QStateMachine::Error | error() const |
| QString | errorString() const |
| QState::RestorePolicy | globalRestorePolicy() const |
| bool | isAnimated() const |
| bool | isRunning() const |
| int | postDelayedEvent(QEvent *event, int delay) |
| int | postDelayedEvent(QEvent *event, std::chrono::milliseconds delay) |
| void | postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority) |
| void | removeDefaultAnimation(QAbstractAnimation *animation) |
| void | removeState(QAbstractState *state) |
| void | setAnimated(bool enabled) |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
Neu implementierte öffentliche Funktionen
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
Öffentliche Slots
| void | setRunning(bool running) |
| void | start() |
| void | stop() |
Signale
| void | runningChanged(bool running) |
| void | started() |
| void | stopped() |
Neu implementierte geschützte Funktionen
| virtual bool | event(QEvent *e) override |
| virtual void | onEntry(QEvent *event) override |
| virtual void | onExit(QEvent *event) override |
Ausführliche Beschreibung
QStateMachine basiert auf den Konzepten und der Notation von Statecharts. QStateMachine ist Teil des „Qt State Machine “-Frameworks.
Eine Zustandsmaschine verwaltet eine Reihe von Zuständen (Klassen, die von ` QAbstractState` erben) und Übergänge (Nachkommen von ` QAbstractTransition`) zwischen diesen Zuständen; diese Zustände und Übergänge definieren einen Zustandsgraphen. Sobald ein Zustandsgraph erstellt wurde, kann die Zustandsmaschine ihn ausführen. Der Ausführungsalgorithmus von QStateMachine basiert auf dem State Chart XML (SCXML) -Algorithmus. Die Übersicht über das Framework enthält mehrere Zustandsgraphen sowie den Code zu deren Erstellung.
Verwenden Sie die Funktion „ addState()“, um der Zustandsmaschine einen Zustand auf oberster Ebene hinzuzufügen. Zustände werden mit der Funktion „ removeState()“ entfernt. Vom Entfernen von Zuständen während des Laufs der Maschine wird abgeraten.
Bevor die Maschine gestartet werden kann, muss der „ initial state “ festgelegt werden. Der Anfangszustand ist der Zustand, in den die Maschine beim Start wechselt. Anschließend können Sie die Zustandsmaschine mit „ start()“ starten. Das Signal „ started()“ wird ausgelöst, wenn der Anfangszustand erreicht wird.
Die Maschine ist ereignisgesteuert und unterhält eine eigene Ereignisschleife. Ereignisse werden über ` postEvent()` an die Maschine gesendet. Beachten Sie, dass dies bedeutet, dass die Maschine asynchron ausgeführt wird und ohne eine laufende Ereignisschleife nicht weiterläuft. Normalerweise müssen Sie keine Ereignisse direkt an die Maschine senden, da die Übergänge von Qt, z. B. ` QEventTransition ` und deren Unterklassen, dies übernehmen. Für benutzerdefinierte, durch Ereignisse ausgelöste Übergänge ist ` postEvent()` jedoch nützlich.
Die Zustandsmaschine verarbeitet Ereignisse und führt Übergänge durch, bis ein Endzustand der obersten Ebene erreicht ist; die Zustandsmaschine sendet dann das Signal „ finished()“ aus. Sie können die Zustandsmaschine auch explizit mit „ stop()“ beenden. In diesem Fall wird das Signal „ stopped()“ ausgesendet.
Der folgende Codeausschnitt zeigt eine Zustandsmaschine, die beendet wird, sobald eine Schaltfläche angeklickt wird:
QPushButton button;
QStateMachine machine;
QState *s1 = new QState();
s1->assignProperty(&button, "text", "Click me");
QFinalState *s2 = new QFinalState();
s1->addTransition(&button, &QPushButton::clicked, s2);
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();Dieses Codebeispiel verwendet „ QState “, das von „ QAbstractState “ erbt. Die Klasse „ QState “ stellt einen Zustand bereit, mit dem Sie Eigenschaften festlegen und Methoden für „ QObjects“ aufrufen können, wenn der Zustand betreten oder verlassen wird. Sie enthält außerdem Hilfsfunktionen zum Hinzufügen von Übergängen, z. B. „ QSignalTransitions“, wie in diesem Beispiel. Weitere Details finden Sie in der Beschreibung der Klasse „ QState “.
Tritt ein Fehler auf, sucht das System nach einem „ error state “ und wechselt in diesen Zustand, sofern einer verfügbar ist. Die möglichen Fehlertypen werden durch die Enumeration „ Error “ beschrieben. Nach dem Eintritt in den Fehlerzustand kann der Fehlertyp mit „ error()“ abgerufen werden. Die Ausführung des Zustandsgraphen wird beim Eintritt in den Fehlerzustand nicht unterbrochen. Gilt für den fehlerhaften Zustand kein Fehlerzustand, bricht die Maschine die Ausführung ab und es wird eine Fehlermeldung auf der Konsole ausgegeben.
Hinweis: Wichtig : Die Einstellung des Parameters „ ChildMode “ einer Zustandsmaschine auf „parallel“ (ParallelStates) führt zu einer ungültigen Zustandsmaschine. Er darf nur auf „ ExclusiveStates “ gesetzt (oder beibehalten) werden.
Siehe auch „ QAbstractState“ , „ QAbstractTransition “, „ QState “ und „Qt State Machine – Übersicht“.
Dokumentation zu Mitgliedstypen
enum QStateMachine::Error
Dieser Enum-Typ definiert Fehler, die in der Zustandsmaschine zur Laufzeit auftreten können. Wenn die Zustandsmaschine zur Laufzeit auf einen nicht behebbaren Fehler stößt, setzt sie den von ` error()` zurückgegebenen Fehlercode sowie die von ` errorString()` zurückgegebene Fehlermeldung und wechselt je nach Fehlerkontext in einen Fehlerzustand.
| Konstante | Wert | Beschreibung |
|---|---|---|
QStateMachine::NoError | 0 | Es ist kein Fehler aufgetreten. |
QStateMachine::NoInitialStateError | 1 | Die Maschine ist in einen „ QState “ mit untergeordneten Zuständen eingetreten, für den kein Anfangszustand festgelegt wurde. Der Kontext dieses Fehlers ist der Zustand, für den ein Anfangszustand fehlt. |
QStateMachine::NoDefaultStateInHistoryStateError | 2 | Die Maschine ist in eine „ QHistoryState “ (Zustandsbaum) mit untergeordneten Zuständen eingetreten, für die kein Standardzustand festgelegt ist. Der Kontext dieses Fehlers ist der „ QHistoryState “, dem ein Standardzustand fehlt. |
QStateMachine::NoCommonAncestorForTransitionError | 3 | Die Maschine hat einen Übergang ausgewählt, dessen Ausgangs- und Zielzustände nicht Teil desselben Zustandsbaums und somit nicht Teil derselben Zustandsmaschine sind. In der Regel könnte dies bedeuten, dass einem der Zustände kein übergeordneter Zustand zugewiesen oder dieser keiner Maschine hinzugefügt wurde. Der Kontext dieses Fehlers ist der Ausgangszustand des Übergangs. |
QStateMachine::StateMachineChildModeSetToParallelError | 4 | Die Eigenschaft „ childMode “ der Maschine wurde auf „ QState::ParallelStates “ gesetzt. Dies ist unzulässig. Nur Zustände dürfen als parallel deklariert werden, nicht die Zustandsmaschine selbst. Dieser Enum-Wert wurde in Qt 5.14 hinzugefügt. |
Siehe auch ` setErrorState()`.
enum QStateMachine::EventPriority
Dieser Enum-Typ gibt die Priorität eines Ereignisses an, das mithilfe von ` postEvent()` an die Zustandsmaschine gesendet wird.
Ereignisse mit hoher Priorität werden vor Ereignissen mit normaler Priorität verarbeitet.
| Konstante | Wert | Beschreibung |
|---|---|---|
QStateMachine::NormalPriority | 0 | Das Ereignis hat normale Priorität. |
QStateMachine::HighPriority | 1 | Das Ereignis hat hohe Priorität. |
Eigenschaftsdokumentation
[bindable] animated : bool
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft gibt an, ob Animationen aktiviert sind
Der Standardwert dieser Eigenschaft ist „ true “.
Siehe auch „ QAbstractTransition::addAnimation()“
Zugriffsfunktionen:
| bool | isAnimated() const |
| void | setAnimated(bool enabled) |
[bindable read-only] errorString : QString
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft enthält die Fehlermeldung dieser Zustandsmaschine
Zugriffsfunktionen:
| QString | errorString() const |
[bindable] globalRestorePolicy : QState::RestorePolicy
Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.
Diese Eigenschaft enthält die Wiederherstellungsrichtlinie für die Zustände dieser Zustandsmaschine.
Der Standardwert dieser Eigenschaft lautet „ QState::DontRestoreProperties “.
Zugriffsfunktionen:
| QState::RestorePolicy | globalRestorePolicy() const |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
running : bool
Diese Eigenschaft enthält den aktuellen Zustand dieser Zustandsmaschine
Zugriffsfunktionen:
| bool | isRunning() const |
| void | setRunning(bool running) |
Benachrichtigungssignal:
| void | runningChanged(bool running) |
Siehe auch start(), stop(), started(), stopped() und runningChanged().
Dokumentation zu den Mitgliedsfunktionen
[explicit] QStateMachine::QStateMachine(QObject *parent = nullptr)
Erstellt eine neue Zustandsmaschine mit dem angegebenen „ parent “.
[virtual noexcept] QStateMachine::~QStateMachine()
Löscht diese Zustandsmaschine.
void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)
Fügt eine Standard- animation hinzu, die bei jedem Übergang berücksichtigt werden soll.
void QStateMachine::addState(QAbstractState *state)
Fügt die angegebene „ state “ zu dieser Zustandsmaschine hinzu. Der Zustand wird zu einem Zustand der obersten Ebene, und die Zustandsmaschine übernimmt die Verantwortung für diesen Zustand.
Befindet sich der Zustand bereits in einer anderen Maschine, wird er zunächst aus der alten Maschine entfernt und anschließend dieser Maschine hinzugefügt.
Siehe auch „ removeState()“ und „ setInitialState()“.
bool QStateMachine::cancelDelayedEvent(int id)
Hebt das verzögerte Ereignis auf, das durch die angegebene ` id` identifiziert wird. Die ID sollte ein Wert sein, der durch einen Aufruf von ` postDelayedEvent()` zurückgegeben wurde. Gibt ` true ` zurück, wenn das Ereignis erfolgreich aufgehoben wurde, andernfalls ` false`.
Hinweis: Diese Funktion ist threadsicher.
Siehe auch postDelayedEvent().
void QStateMachine::clearError()
Löscht die Fehlermeldung und den Fehlercode der Zustandsmaschine.
QSet<QAbstractState *> QStateMachine::configuration() const
Gibt die maximale konsistente Menge von Zuständen (einschließlich Parallel- und Endzustände) zurück, in der sich diese Zustandsmaschine derzeit befindet. Befindet sich ein Zustand s in der Konfiguration, so gilt immer, dass sich auch der übergeordnete Zustand von s in c befindet. Beachten Sie jedoch, dass die Maschine selbst kein explizites Element der Konfiguration ist.
QList<QAbstractAnimation *> QStateMachine::defaultAnimations() const
Gibt die Liste der Standardanimationen zurück, die bei jedem Übergang berücksichtigt werden.
QStateMachine::Error QStateMachine::error() const
Gibt den Fehlercode des letzten Fehlers zurück, der in der Zustandsmaschine aufgetreten ist.
QString QStateMachine::errorString() const
Gibt die Fehlerzeichenfolge des letzten Fehlers zurück, der in der Zustandsmaschine aufgetreten ist.
Hinweis: Getter -Funktion für die Eigenschaft `errorString`.
[override virtual protected] bool QStateMachine::event(QEvent *e)
Implementiert: ` QState::event(QEvent *e)`.
[override virtual] bool QStateMachine::eventFilter(QObject *watched, QEvent *event)
Implementiert neu: ` QObject::eventFilter` (`QObject *watched, QEvent *event`).
QState::RestorePolicy QStateMachine::globalRestorePolicy() const
Gibt die Wiederherstellungsrichtlinie der Zustandsmaschine zurück.
Hinweis: Getter -Funktion für die Eigenschaft `globalRestorePolicy`.
Siehe auch „ setGlobalRestorePolicy()“.
bool QStateMachine::isAnimated() const
Gibt zurück, ob Animationen für diese Zustandsmaschine aktiviert sind.
Hinweis: Getter -Funktion für die Eigenschaft „ animated “.
[override virtual protected] void QStateMachine::onEntry(QEvent *event)
Implementiert: ` QState::onEntry(QEvent *event)`.
Diese Funktion ruft ` start()` auf, um die Zustandsmaschine zu starten.
[override virtual protected] void QStateMachine::onExit(QEvent *event)
Implementiert: ` QState::onExit(QEvent *event)`.
Diese Funktion ruft „ stop()“ auf, um die Zustandsmaschine anzuhalten, und sendet anschließend das Signal „ stopped()“ aus.
int QStateMachine::postDelayedEvent(QEvent *event, int delay)
Sendet das angegebene Ereignis „ event “ zur Verarbeitung durch diese Zustandsmaschine mit der angegebenen Verzögerung „ delay “ in Millisekunden. Gibt eine Kennung zurück, die dem verzögerten Ereignis zugeordnet ist, oder -1, falls das Ereignis nicht gesendet werden konnte.
Diese Funktion kehrt sofort zurück. Nach Ablauf der Verzögerungszeit wird das Ereignis zur Verarbeitung in die Ereigniswarteschlange der Zustandsmaschine aufgenommen. Die Zustandsmaschine übernimmt die Verantwortung für das Ereignis und löscht es, sobald es verarbeitet wurde.
Sie können Ereignisse nur einreichen, wenn die Zustandsmaschine läuft.
Hinweis: Diese Funktion ist threadsicher.
Siehe auch cancelDelayedEvent() und postEvent().
int QStateMachine::postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
Sendet das angegebene Ereignis „ event “ zur Verarbeitung durch diese Zustandsmaschine mit der angegebenen Verzögerung „ delay “ in Millisekunden. Gibt eine Kennung zurück, die dem verzögerten Ereignis zugeordnet ist, oder -1, falls das Ereignis nicht gesendet werden konnte.
Diese Funktion kehrt sofort zurück. Nach Ablauf der Verzögerungszeit wird das Ereignis zur Verarbeitung in die Ereigniswarteschlange der Zustandsmaschine aufgenommen. Die Zustandsmaschine übernimmt die Verantwortung für das Ereignis und löscht es, sobald es verarbeitet wurde.
Ereignisse können nur gesendet werden, wenn die Zustandsmaschine läuft.
Dies ist eine überladene Funktion.
Hinweis: Diese Funktion ist threadsicher.
Siehe auch cancelDelayedEvent() und postEvent().
void QStateMachine::postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)
Leitet das angegebene „ event “ des angegebenen „ priority “ zur Verarbeitung durch diese Zustandsmaschine weiter.
Diese Funktion kehrt sofort zurück. Das Ereignis wird der Ereigniswarteschlange der Zustandsmaschine hinzugefügt. Ereignisse werden in der Reihenfolge ihrer Übermittlung verarbeitet. Die Zustandsmaschine übernimmt die Verantwortung für das Ereignis und löscht es, sobald es verarbeitet wurde.
Sie können Ereignisse nur senden, wenn die Zustandsmaschine läuft oder gerade startet.
Hinweis: Diese Funktion ist threadsicher.
Siehe auch ` postDelayedEvent()`.
void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)
Entfernt „ animation “ aus der Liste der Standardanimationen.
void QStateMachine::removeState(QAbstractState *state)
Entfernt den angegebenen „ state “ aus dieser Zustandsmaschine. Die Zustandsmaschine gibt die Eigentumsrechte an dem Zustand frei.
Siehe auch ` addState()`.
[signal] void QStateMachine::runningChanged(bool running)
Dieses Signal wird ausgelöst, wenn die Eigenschaft „running“ mit dem Argument „ running “ geändert wird.
Hinweis: Notifier -Signal für die Eigenschaft „ running “.
Siehe auch „ QStateMachine::running “.
void QStateMachine::setAnimated(bool enabled)
Legt fest, ob Animationen für diese Zustandsmaschine „ enabled “ sind.
Hinweis: Setter -Funktion für die Eigenschaft ` animated`.
Siehe auch „ isAnimated()“.
void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)
Legt die Wiederherstellungsrichtlinie der Zustandsmaschine auf „ restorePolicy “ fest. Die Standard-Wiederherstellungsrichtlinie lautet „ QState::DontRestoreProperties “.
Hinweis: Setter -Funktion für die Eigenschaft „ globalRestorePolicy “.
Siehe auch „ globalRestorePolicy()“.
[slot] void QStateMachine::start()
Startet diese Zustandsmaschine. Die Maschine setzt ihre Konfiguration zurück und wechselt in den Anfangszustand. Wenn ein endgültiger Zustand der obersten Ebene (QFinalState) erreicht wird, gibt die Maschine das Signal „ finished()“ aus.
Hinweis: Eine Zustandsmaschine läuft nicht ohne eine aktive Ereignisschleife, wie beispielsweise die mit ` QCoreApplication::exec()` oder ` QApplication::exec()` gestartete Hauptereignisschleife der Anwendung.
Siehe auch started(), finished(), stop(), initialState() und setRunning().
[private signal] void QStateMachine::started()
Dieses Signal wird ausgesendet, wenn die Zustandsmaschine ihren Anfangszustand (QStateMachine::initialState) erreicht hat.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch „ QStateMachine::finished()“ und „ QStateMachine::start()“.
[slot] void QStateMachine::stop()
Hält diese Zustandsmaschine an. Die Zustandsmaschine stellt die Verarbeitung von Ereignissen ein und sendet anschließend das Signal „ stopped()“ aus.
Siehe auch „ stopped()“, „ start()“ und „ setRunning()“.
[private signal] void QStateMachine::stopped()
Dieses Signal wird ausgesendet, wenn die Zustandsmaschine angehalten hat.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, darf jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch QStateMachine::stop() und QStateMachine::finished().
© 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.