Qt SCXML Überblick

Das Modul Qt SCXML bietet Klassen zur Einbettung von Zustandsautomaten, die aus State Chart XML (SCXML) Dateien erstellt wurden, in Qt-Anwendungen. Die SCXML-Dateien können mit jedem geeigneten Werkzeug erstellt werden, wie z.B. einem Texteditor oder einem Simulator, solange sie der SCXML-Spezifikation entsprechen, mit den Einschränkungen und Erweiterungen, die in SCXML Compliance beschrieben sind.

Teile der Anwendungslogik können durch eine gekapselte SCXML-Datei ersetzt werden. Dies ermöglicht eine klare Trennung zwischen der Anwendungslogik und der Implementierung der Benutzeroberfläche durch die Verwendung von Qt Quick oder Qt Widgets.

Das Modul Qt SCXML unterscheidet sich vom State Machine Framework im Qt State Machine Modul dadurch, dass Qt SCXML einen konformen Prozessor bereitstellt, der konforme SCXML-Dokumente parsen und verarbeiten kann. In Qt SCXML werden State Machines aus separaten SCXML-Dateien gelesen und in Qt-Anwendungen integriert, indem die Klasse QScxmlStateMachine instanziiert und eine SCXML-Datei dynamisch geladen wird oder indem der Qt SCXML Compiler eine Unterklasse von QScxmlStateMachine erzeugt, die instanziiert wird. Die Kommunikation mit dem SCXML-Dokument erfolgt über die Signale und Methoden der Klasse QScxmlStateMachine.

Die grundlegenden Konzepte des Zustandsautomaten, Zustand, Übergang und Ereignis, basieren auf denen der SCXML-Spezifikation. Zustandsdiagramme bieten eine grafische Möglichkeit zur Modellierung der Reaktion eines Systems auf Stimuli. Dazu werden die möglichen Zustände definiert, in denen sich das System befinden kann, und wie das System von einem Zustand in einen anderen übergehen kann (Übergänge zwischen Zuständen). Ein Hauptmerkmal von ereignisgesteuerten Systemen (wie Qt-Anwendungen) ist, dass das Verhalten oft nicht nur vom letzten oder aktuellen Ereignis abhängt, sondern auch von den Ereignissen, die diesem vorausgegangen sind. Mit Zustandsdiagrammen lässt sich diese Information leicht ausdrücken.

Qt SCXML Das Qt-Ereignisdiagramm ist eng mit dem Meta-Objektsystem von Qt integriert; beispielsweise können Übergänge zwischen Zuständen durch Signale ausgelöst werden, und Zustände können so konfiguriert werden, dass sie Eigenschaften setzen und Methoden auf QObjects aufrufen. Das Ereignissystem von Qt wird zur Steuerung der Zustandsautomaten verwendet.

Der Zustandsgraph in Qt SCXML ist hierarchisch aufgebaut. Zustände können in andere Zustände verschachtelt werden, und die aktuelle Konfiguration des Zustandsautomaten besteht aus der Menge der Zustände, die gerade aktiv sind.

Datenmodelle

Qt SCXML unterstützt das Null-Datenmodell, das von konformen SCXML-Prozessoren unterstützt werden muss, sowie das ECMAScript-Datenmodell. Darüber hinaus stellt Qt SCXML ein eigenes C++-Datenmodell zur Verfügung, das durch die Klasse QScxmlCppDataModel implementiert wird. Die Klasse ermöglicht das Schreiben von C++-Code für expr-Attribute und <script> -Elemente. Der Datenteil des Datenmodells wird durch eine Unterklasse von QScxmlCppDataModel unterstützt, für die der Qt SCXML Compiler die Dispatch-Methoden generiert.

Qt SCXML Compiler

Der Qt SCXML Compiler, qscxmlc, liest eine .scxml-Datei und erzeugt C++-Quell- und Header-Dateien, die eine Klasse enthalten, die einen in SCXML definierten Zustandsautomaten implementiert. Weitere Informationen zur Verwendung des Compilers finden Sie unter Verwendung des Qt SCXML Compilers (qscxmlc).

Sowohl die dynamisch erstellten als auch die kompilierten Zustandsautomaten verhalten sich gleich, haben die gleichen Eigenschaften, Zustände, Datenmodelle usw. Sie unterscheiden sich nur in der Art und Weise, wie sie instanziiert werden. Weitere Informationen finden Sie unter Instanziierung von Zustandsautomaten und Qt SCXML Beispiele.

Protokollierungskategorien

Das Modul Qt SCXML exportiert die folgenden Protokollierungskategorien:

ProtokollierungskategorieBeschreibung
qscxmlLogAktiviert das Qt SCXML Modulprotokoll
scxmlLogErmöglicht die Protokollierung von SCXML-Dokumenten

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