PySide6.QtScxml.QScxmlCppDataModel¶
- class QScxmlCppDataModel¶
- The - QScxmlCppDataModelclass is a C++ data model for a Qt SCXML state machine. More…- Synopsis¶- Methods¶- def - __init__()
- def - inState()
- def - scxmlEvent()
 - Note - This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE - Detailed Description¶- Warning - This section contains snippets that were automatically translated from C++ to Python and may contain errors. - The C++ data model for SCXML lets you write 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 (- qscxmlc) will generate the dispatch methods. It cannot be used when loading an SCXML file at runtime.- Usage is through the datamodel attribute of the - <scxml>element:- <scxml datamodel="cplusplus:TheDataModel:thedatamodel.h" ....> - The format of the datamodel attribute is: - cplusplus:<class-name>:<classdef-header>. So, for the example above, there should be a file thedatamodel.h containing a subclass of- QScxmlCppDataModel, containing at least the following:- from PySide6.QtScxml import QScxmlCppDataModel class TheDataModel(QScxmlCppDataModel): Q_OBJECT Q_SCXML_DATAMODEL ... - The Q_SCXML_DATAMODEL has to appear in the private section of the class definition, for example right after the opening bracket, or after a Q_OBJECT macro. This macro expands to the declaration of some virtual methods whose implementation is generated by the Qt SCXML compiler. - The Qt SCXML compiler will generate the various - evaluateTomethods, and convert expressions and scripts into lambdas inside those methods. For example:- <scxml datamodel="cplusplus:TheDataModel:thedatamodel.h" xmlns="http://www.w3.org/2005/07/scxml" version="1.0" name="MediaPlayerStateMachine"> <state id="stopped"> <transition event="tap" cond="isValidMedia()" target="playing"/> </state> <state id="playing"> <onentry> <script> media = eventData().value(QStringLiteral("media")).toString(); </script> <send event="playbackStarted"> <param name="media" expr="media"/> </send> </onentry> </state> </scxml> - This will result in: - bool TheDataModel::evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... return [this]()->bool{ return isValidMedia(); }(); // .... } QVariant TheDataModel::evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... return [this]()->QVariant{ return media; }(); // .... } void TheDataModel::evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... [this]()->void{ media = eventData().value(QStringLiteral("media")).toString(); }(); // .... } - So, you are not limited to call functions. In a - <script>element you can put zero or more C++ statements, and in cond or expr attributes you can use any C++ expression that can be converted to the respective bool or QVariant. And, as the- thispointer is also captured, you can call or access the data model (the media attribute in the example above). For the full example, see SCXML Media Player .- See also - Creates a new C++ data model with the parent object - parent.- inState(stateName)¶
- Parameters:
- stateName – str 
- Return type:
- bool 
 
 - Returns - trueif the state machine is in the state specified by- stateName,- falseotherwise.- scxmlEvent()¶
- Return type:
 
 - Holds the current event that is being processed by the state machine. - See also SCXML Specification - 5.10 System Variables for the description of the - _eventvariable.- Returns the event currently being processed. - See also - setScxmlEvent()