状态机 QML 类型

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

导入语句import QtQml.StateMachine 6.7
继承

状态

属性

信号

方法

详细说明

状态机基于 状态图 的概念和表示方法。状态机是 Qt 状态机 QML API 的一部分。

状态机管理一组状态及其之间转换;这些状态和转换定义了状态图。一旦状态图构建完成,状态机可以执行它。状态机的执行算法基于 状态图 XML (SCXML) 算法。框架的 概述 给出了几个状态图及其构建它们的代码。

在启动机器之前,必须设置 initialState。初始状态是在启动时机器进入的状态。然后你可以设置运行属性为 true 或调用 start() 状态机。当初始状态被进入时,会发射 started 信号。

状态机会处理事件并执行转换,直到进入顶级最终状态;此时状态机会发射 finished() 信号。您也可以显式 停止 状态机(您也可以将运行属性设置为 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() 方法检索错误的类型。执行状态图不会在进入错误状态时停止。如果没有适用错误的错误状态,机器将停止执行,并将错误信息打印到控制台。

警告: 将状态机的childMode设置为除了QState::ExclusiveStates之外的其他值将导致状态机无效,并可能导致行为错误。


另请参阅QAbstractState状态信号转换超时转换历史状态Qt 状态机 QML 指南

属性文档

errorString : string [只读]

此状态机的错误字符串。


globalRestorePolicy : enumeration

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

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

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

稍后,当机器进入一个不设置给定属性值的另一个状态时,该属性将自动恢复到其初始值。

任何给定属性只能保存一个初始值。如果状态机已经保存了某个属性的值,则只有在该属性成功恢复之前,才能覆盖该值。

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

running : bool

此状态机的运行状态。

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


信号文档

started()

当状态机进入其初始状态(State::initialState)时该信号被发出。

注意: 对应处理程序是 onStarted

另请参阅runningstart() 和 State::finished


stopped()

当状态机停止时该信号被发出。

注意: 对应处理程序是 onStopped

另请参阅runningstop() 和 State::finished


方法文档

start()

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

注意: 没有运行事件循环,例如使用QCoreApplication::exec() 或 QApplication::exec() 启动的应用程序主事件循环,状态机不会运行。

另请参阅startedState::finishedstop()、State::initialStaterunning


stop()

停止此状态机。状态机将停止处理事件,然后发出停止信号。

另请参阅stoppedstart() 以及 running


© 2024 Qt公司版权所有。本文件包含的文档贡献均为各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 许可使用的。Qt和相应标志是芬兰及世界其他地区的Qt公司商标。所有其他商标均为各自所有者的财产。