SCXML Traffic Light (Dynamic, Widgets)#

A widget-based application that uses a dynamically loaded state machine to implement a traffic light.

../_images/trafficlight1.png

Traffic Light demonstrates how to connect to the active properties of a state in a dynamically loaded state machine.

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.

Dynamically Loading the State Machine#

We link against the Qt SCXML module by adding the following lines to the example’s build files.

To .pro when using qmake:

To CMakeLists.txt when using cmake:

We dynamically create the state machine in trafficlight-widgets-dynamic.cpp:

And then instantiate it:

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:

Example project @ code.qt.io