SCXML Traffic Light (Static, Widgets)#
A widget-based application that uses a compiled state machine to implement a traffic light.
Traffic Light Example (Static) demonstrates how to connect to the active properties of a state in a state machine that is compiled to a class.
The UI is created using Qt Widgets.
Running the Example#
To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, visit Building and Running an Example.
Compiling the State Machine#
We link against the Qt SCXML module by adding the following lines to the example’s build files.
.pro*
when using qmake:#
We then specify the state machine to compile:
CMakeLists.txt*
when using cmake:#
We then specify the state machine to compile:
The statechart directives STATECHARTS or qt6_add_statecharts invoke the Qt SCXML Compiler, qscxmlc
, which is run automatically to generate statemachine.h and statemachine.cpp, which are then added appropriately as headers and sources for compilation.
Instantiating the State Machine#
We instantiate the generated TrafficLightStateMachine
class in the trafficlight-widgets-static.cpp file, as follows:
Connecting to States#
In the SCXML file, we specify states for each light: red, yellow, and green. In the <onentry>
element, we specify the event to send when entering the state and the delay in seconds before sending the event. In the <transition>
element, we specify the event that triggers the transition to the state specified by the target
attribute:
We connect to the states as follows: