86 lines
3.4 KiB
Plaintext
86 lines
3.4 KiB
Plaintext
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
** Contact: http://www.qt-project.org/legal
|
|
**
|
|
** 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 Digia. For licensing terms and
|
|
** conditions see http://qt.digia.com/licensing. For further information
|
|
** use the contact form at http://qt.digia.com/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: http://www.gnu.org/copyleft/fdl.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.
|
|
|
|
*/
|