Revision control
++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
++
++ /*!
++ \page qtscxml-overview.html
++ \title Qt SCXML Overview
++ \brief Describes the Qt SCXML module.
++ \ingroup explanation
++
++ 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 \l {SCXML Specification}, with the
++ restrictions and extensions described in \l{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 \l {Qt State Machine Overview}
++ {State Machine framework} in the \l{Qt State Machine} module in that Qt SCXML provides a
++ \e {conforming processor} that can parse and process \e {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, \e state, \e transition, and \e 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 \l{QObject}{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.
++
++ \section1 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 \e expr
++ attributes and \c <script> elements. The \e {data part} of the data model is
++ backed by a subclass of QScxmlCppDataModel, for which the Qt SCXML compiler
++ will generate the dispatch methods.
++
++ \section1 Qt SCXML Compiler
++
++ The Qt SCXML Compiler, \c 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 \l{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
++ \l{Instantiating State Machines} and \l{Qt SCXML Examples}.
++
++ \section1 Logging Categories
++
++ The Qt SCXML module exports the following logging categories:
++ \table
++ \header
++ \li Logging Category
++ \li Description
++ \row
++ \li qscxmlLog
++ \li Enables Qt SCXML module log
++ \row
++ \li scxmlLog
++ \li Enables log of SCXML documents
++ \endtable
++ */