Qt SCXML Overview

The Qt SCXML module provides classes for embedding state machines created from State Chart XML (SCXML) files in Qt applications. The SCXML files can be created using any suitable tool, such as a text editor or a simulator, as long as they comply to the SCXML Specification, with the restrictions and extensions described in SCXML Compliance.

Parts of the application logic can be replaced with an encapsulated SCXML file. This enables creating a clear division between the application logic and the user interface implementation by using Qt Quick or Qt Widgets.

The Qt SCXML module differs from the State Machine framework in the Qt Core module in that Qt SCXML provides a conforming processor that can parse and process conforming SCXML documents. In Qt SCXML, state machines are read from separate SCXML files and integrated to Qt applications by instantiating the QScxmlStateMachine class and loading an SCXML file dynamically or by using the Qt SCXML Compiler to generate a subclass of QScxmlStateMachine that is instantiated. The communication with the SCXML document is provided by the signals and methods of the QScxmlStateMachine class.

The basic state machine concepts, state, transition, and event are based on those in the SCXML Specification. State charts provide a graphical way of modeling how a system reacts to stimuli. This is done by defining the possible states that the system can be in, and how the system can move from one state to another (transitions between states). A key characteristic of event-driven systems (such as Qt applications) is that behavior often depends not only on the last or current event, but also the events that preceded it. With state charts, this information is easy to express.

Qt SCXML integrates tightly with Qt's meta-object system; for example, transitions between states can be triggered by signals, and states can be configured to set properties and invoke methods on QObjects. Qt's event system is used to drive the state machines.

The state graph in Qt SCXML is hierarchical. States can be nested inside other states, and the current configuration of the state machine consists of the set of states that are currently active.

Data Models

Qt SCXML supports the null data model, which must be supported by conforming SCXML processors, and the ECMAScript data model. In addition, Qt SCXML provices its own C++ data model that is implemented by the QScxmlCppDataModel class. The class enables writing C++ code for expr attributes and <script> elements. The data part of the data model is backed by a subclass of QScxmlCppDataModel, for which the Qt SCXML compiler will generate the dispatch methods.

Qt SCXML Compiler

The Qt SCXML Compiler, qscxmlc, reads an .scxml file and produces C++ source and header files that contain a class that implements a state machine as defined in SCXML. For more information about using the compiler, see Using the Qt SCXML Compiler (qscxmlc).

Both the dynamically created and the compiled state machines behave in the same way, have the same properties, states, data model, and so on. They only differ in the way they are instantiated. For more information, see Instantiating State Machines and Qt SCXML Examples.

Logging Categories

The Qt SCXML module exports the following logging categories:

Logging CategoryDescription
qscxmlLogEnables Qt SCXML module log
scxmlLogEnables log of SCXML documents

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