本页内容

StateMachine QML Type

提供了一个分层有限状态机。更多...

Import Statement: import QtQml.StateMachine 6.12
Inherits:

State

属性

信号

方法

详细说明

StateMachine 基于状态图(Statecharts)的概念和符号体系。StateMachine 是Qt State Machine QML API的一部分

状态机管理一组状态以及这些状态之间的转换;这些状态和转换共同定义了一个状态图。状态图构建完成后,状态机即可执行该状态图。StateMachine 的执行算法基于状态图 XML(SCXML)算法。框架概述中提供了几个状态图及其构建代码。

在启动状态机之前,必须设置initialState 。初始状态是状态机启动时进入的状态。随后,您可以将running属性设置为true,或调用start()来启动状态机。当进入初始状态时,会发出started信号。

状态机处理事件并进行状态转换,直至进入顶级终态;此时状态机将发出 finished() 信号。您也可以显式地通过stop() 停止状态机(也可以将 running 属性设置为 false)。在此情况下,将发出 stopped 信号。

用法示例

以下代码片段展示了一个在点击按钮时会结束运行的状态机:

import QtQuick
import QtQml.StateMachine as DSM

Rectangle {
    Button {
        anchors.fill: parent
        id: button
        text: "Finish state"
        DSM.StateMachine {
            id: stateMachine
            initialState: state
            running: true
            DSM.State {
                id: state
                DSM.SignalTransition {
                    targetState: finalState
                    signal: button.clicked
                }
            }
            DSM.FinalState {
                id: finalState
            }
            onFinished: Qt.quit()
        }
    }
}

如果遇到错误,状态机将检查是否存在errorState ,如果存在,则进入该状态。 进入错误状态后,可通过 error() 获取错误类型。进入错误状态后,状态图的执行不会停止。如果该错误状态不对应任何错误状态,状态机将停止执行,并向控制台打印一条错误消息。

警告:将 StateMachine 的 childMode设置为 QState::ExclusiveStates 以外的任何值,将导致状态机无效,并可能引发异常行为。


另请参阅 《QML指南》中的QAbstractState 、State 、SignalTransition 、TimeoutTransition 、HistoryState 以及Qt State Machine 。

属性文档

errorString : string [read-only]

该状态机的错误字符串。

globalRestorePolicy : enumeration

此状态机的状态恢复策略。

该属性的默认值为QState.DontRestoreProperties。

此枚举指定恢复策略的类型。当状态机进入会设置一个或多个属性的状态时,恢复策略即生效。如果恢复策略设置为QState.RestoreProperties,状态机将在设置新值之前保存该属性的原始值。

随后,当状态机进入一个未为该属性设置值的状态时,该属性将自动恢复为其初始值。

对于任何给定的属性,仅会保存一个初始值。如果状态机已经保存了该属性的值,则在该属性成功恢复之前,该值不会被覆盖。

  • QState.DontRestoreProperties 状态机不应保存属性的初始值,也不应在稍后将其恢复。
  • QState.RestoreProperties 状态机应保存属性的初始值,并在稍后恢复它们。

running : bool

该状态机的运行状态。

另请参阅 start() 和stop()。

信号文档

started()

当状态机进入初始状态(State::initialState )时,会发出此信号。

注意: 相应的处理程序 是onStarted 。

另请参阅 running 、start() 和State::finished 。

stopped()

当状态机停止运行时,会发出此信号。

注意: 相应的处理程序 为onStopped 。

另请参阅 running 、stop() 和State::finished 。

方法文档

void start()

启动此状态机。状态机将重置其配置并转入初始状态。当进入最终的顶级状态(FinalState )时,状态机将发出 finished() 信号。

注意: 如果没有正在运行的事件循环(例如通过QCoreApplication::exec() 或QApplication::exec() 启动的主应用程序事件循环),状态机 将无法运行。

另请参阅 started 、State::finished 、stop()、State::initialState 以及running 。

void stop()

停止此状态机。状态机将停止处理事件,随后发出“已停止”信号。

另请参阅 stopped 、start() 以及running 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.