Auf dieser Seite

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:

Öffentliche Typen

class SignalEvent
class WrappedEvent
enum Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError }
enum EventPriority { NormalPriority, HighPriority }

Eigenschaften

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

KonstanteWertBeschreibung
QStateMachine::NoError0Es ist kein Fehler aufgetreten.
QStateMachine::NoInitialStateError1Die 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::NoDefaultStateInHistoryStateError2Die 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::NoCommonAncestorForTransitionError3Die 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::StateMachineChildModeSetToParallelError4Die 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.

KonstanteWertBeschreibung
QStateMachine::NormalPriority0Das Ereignis hat normale Priorität.
QStateMachine::HighPriority1Das 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.