// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
  \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
  \ingroup explanation

  \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}

  */
