/****************************************************************************
**
** Copyright (C) 2021 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$
**
****************************************************************************/

/*!
  \page qtstatemachine-overview.html
  \title Qt State Machine Overview
  \brief An overview of the State Machine framework for constructing and executing state graphs.
  \ingroup technology-apis

  \tableofcontents

  The State Machine framework provides classes for creating and executing
  state graphs. The concepts and notation are based on those from Harel's
  \l{http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf}{Statecharts: A visual formalism for complex systems}, which
  is also the basis of UML state diagrams. The semantics of state machine
  execution are based on \l{State Chart XML: State Machine Notation for
  Control Abstraction}{State Chart XML (SCXML)}.

  Statecharts provide a graphical way of modeling how a system reacts to
  stimuli. This is done by defining the possible \e states that the system can
  be in, and how the system can move from one state to another (\e transitions
  between states). A key characteristic of event-driven systems (such as Qt
  applications) is that behavior often depends not only on the last or current
  event, but also the events that preceded it. With statecharts, this
  information is easy to express.

  The State Machine framework provides an API and execution model that can be
  used to effectively embed the elements and semantics of statecharts in Qt
  applications. The framework integrates tightly with Qt's meta-object system;
  for example, transitions between states can be triggered by signals, and
  states can be configured to set properties and invoke methods on {QObject}s.
  Qt's event system is used to drive the state machines.

  The state graph in the State Machine framework is hierarchical. States can be nested inside of
  other states, and the current configuration of the state machine consists of the set of states
  which are currently active. All the states in a valid configuration of the state machine will
  have a common ancestor.

  \sa {Qt State Machine C++ Guide}, {Qt State Machine QML Guide}, {Qt SCXML Overview}

  */
