StateMachine QML Type
提供分层有限状态机。更多
| Import Statement: | import QtQml.StateMachine 6.11 |
| Inherits: |
属性
- errorString : string
- globalRestorePolicy : enumeration
- running : bool
信号
方法
详细说明
StateMachine 基于Statecharts 的概念和符号。StateMachine 是Qt State Machine QML API的一部分。
状态机管理一组状态和这些状态之间的转换;这些状态和转换定义了一个状态图。一旦建立了状态图,状态机就可以执行它。StateMachine 的执行算法基于状态图 XML(SCXML)算法。该框架的概述提供了几种状态图和构建状态图的代码。
在机器启动之前,必须设置initialState 。初始状态是机器启动时进入的状态。然后可以将运行属性设为 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() 检索错误类型。进入错误状态后,状态图的执行不会停止。如果没有错误状态适用于错误状态,机器将停止执行,并将错误信息打印到控制台。
警告: 将状态机的子模式(childMode)设置为QState::ExclusiveStates 以外的任何值,都会导致状态机无效,并可能导致不正确的行为。
另请参阅 QAbstractState,State,SignalTransition,TimeoutTransition,HistoryState 和Qt State Machine QML 指南。
属性文档
errorString : string [read-only]
该状态机的错误字符串。
globalRestorePolicy : enumeration
此状态机状态的还原策略。
该属性的默认值是QState.DontRestoreProperties。
该枚举指定了还原策略类型。还原策略在机器进入设置一个或多个属性的状态时生效。如果还原策略设置为QState.RestoreProperties,状态机将在设置新值前保存属性的原始值。
之后,当机器进入一个不为给定属性设置值的状态时,该属性将自动恢复为初始值。
任何给定属性都只能保存一个初始值。如果状态机已经保存了某个属性的值,那么在成功恢复该属性之前,该值不会被覆盖。
running : bool
状态机的运行状态。
信号文档
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()
停止该状态机。状态机将停止处理事件,然后发出停止信号。
© 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.