| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \example statemachine/trafficlight |
| \title Traffic Light Example |
| |
| \brief The Traffic Light example shows how to use \l{The State Machine Framework} |
| to implement the control flow of a traffic light. |
| |
| \image trafficlight-example.png |
| |
| In this example we write a TrafficLightWidget class. The traffic light has |
| three lights: Red, yellow and green. The traffic light transitions from |
| one light to another (red to yellow to green to yellow to red again) at |
| certain intervals. |
| |
| \snippet statemachine/trafficlight/main.cpp 0 |
| |
| The LightWidget class represents a single light of the traffic light. It |
| provides an \c on property and two slots, turnOn() and turnOff(), to turn |
| the light on and off, respectively. The widget paints itself in the color |
| that's passed to the constructor. |
| |
| \snippet statemachine/trafficlight/main.cpp 1 |
| |
| The TrafficLightWidget class represents the visual part of the traffic |
| light; it's a widget that contains three lights arranged vertically, and |
| provides accessor functions for these. |
| |
| \snippet statemachine/trafficlight/main.cpp 2 |
| |
| The createLightState() function creates a state that turns a light on when |
| the state is entered, and off when the state is exited. The state uses a |
| timer, and as we shall see the timeout is used to transition from one |
| LightState to another. Here is the statechart for the light state: |
| |
| \image trafficlight-example1.png |
| \omit |
| \caption This is a caption |
| \endomit |
| |
| \snippet statemachine/trafficlight/main.cpp 3 |
| |
| The TrafficLight class combines the TrafficLightWidget with a state |
| machine. The state graph has four states: red-to-yellow, yellow-to-green, |
| green-to-yellow and yellow-to-red. The initial state is red-to-yellow; |
| when the state's timer times out, the state machine transitions to |
| yellow-to-green. The same process repeats through the other states. |
| This is what the statechart looks like: |
| |
| \image trafficlight-example2.png |
| \omit |
| \caption This is a caption |
| \endomit |
| |
| \snippet statemachine/trafficlight/main.cpp 4 |
| |
| The main() function constructs a TrafficLight and shows it. |
| |
| */ |