PySide6.QtStateMachine.QStateMachine

class QStateMachine

QStateMachine 类提供了一个分层的有限状态机。More_

PySide6.QtStateMachine.QStateMachine 的继承图

概要

属性

方法

虚拟方法

插槽

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QStateMachine 基于 Statecharts 的概念和符号。QStateMachineQt 状态机框架 的一部分。

状态机管理一组状态(继承自QAbstractState的类)和这些状态之间的转换(QAbstractTransition的后代);这些状态和转换定义了一个状态图。一旦构建了状态图,状态机就可以执行它。QStateMachine的执行算法基于State Chart XML (SCXML)算法。框架的概述提供了几个状态图以及构建它们的代码。

使用addState()函数向状态机添加一个顶级状态。状态通过removeState()函数移除。不建议在机器运行时移除状态。

在机器启动之前,必须设置initial state。初始状态是机器启动时进入的状态。然后你可以start()状态机。当进入初始状态时,会发出started()信号。

机器是事件驱动的,并保持自己的事件循环。事件通过postEvent()发布到机器。请注意,这意味着它是异步执行的,并且如果没有运行的事件循环,它将不会进展。通常,您不需要直接向机器发布事件,因为Qt的转换,例如QEventTransition及其子类,会处理这一点。但对于由事件触发的自定义转换,postEvent()是有用的。

状态机处理事件并进行转换,直到进入顶级最终状态;然后状态机发出finished()信号。你也可以显式地stop()状态机。在这种情况下,会发出stopped()信号。

以下代码片段展示了一个状态机,当按钮被点击时它将完成:

button = QPushButton()
machine = QStateMachine()
s1 = QState()
s1.assignProperty(button, "text", "Click me")
s2 = QFinalState()
s1->addTransition(button.clicked, s2)
machine.addState(s1)
machine.addState(s2)
machine.setInitialState(s1)
machine.start()

此代码示例使用了QState,它继承了QAbstractStateQState类提供了一个状态,您可以在进入或退出状态时使用它来设置属性并调用QObjects上的方法。它还包含用于添加转换的便捷函数,例如本示例中的QSignalTransition。有关更多详细信息,请参阅QState类描述。

如果遇到错误,机器将寻找一个error state,如果有可用的错误状态,它将进入这个状态。可能的错误类型由Error枚举描述。进入错误状态后,可以使用error()检索错误的类型。进入错误状态后,状态图的执行不会停止。如果没有适用于错误状态的错误状态,机器将停止执行,并将错误消息打印到控制台。

注意

重要提示:将状态机的ChildMode设置为并行(ParallelStates)会导致状态机无效。它只能设置为(或保持为)ExclusiveStates

另请参阅

QAbstractState QAbstractTransition QState Qt 状态机概述

class EventPriority

此枚举类型指定了使用postEvent()发布到状态机的事件的优先级。

高优先级的事件在普通优先级的事件之前处理。

常量

描述

QStateMachine.NormalPriority

事件具有正常优先级。

QStateMachine.HighPriority

该事件具有高优先级。

class Error

此枚举类型定义了在运行时状态机中可能发生的错误。当状态机在运行时遇到不可恢复的错误时,它将设置由error()返回的错误代码,由errorString()返回的错误消息,并根据错误的上下文进入错误状态。

常量

描述

QStateMachine.NoError

没有发生错误。

QStateMachine.NoInitialStateError

机器进入了一个带有子状态的QState,但没有设置初始状态。此错误的上下文是缺少初始状态的状态。

QStateMachine.NoDefaultStateInHistoryStateError

机器进入了一个没有设置默认状态的QHistoryState。此错误的上下文是缺少默认状态的QHistoryState

QStateMachine.NoCommonAncestorForTransitionError

机器选择了一个转换,其源和目标不属于同一状态树,因此不属于同一状态机。通常,这可能意味着其中一个状态没有被赋予任何父状态或添加到任何机器中。此错误的上下文是转换的源状态。

QStateMachine.StateMachineChildModeSetToParallelError

机器的 childMode 属性被设置为 ParallelStates。这是非法的。只有状态可以被声明为并行,而不是状态机本身。此枚举值在 Qt 5.14 中添加。

另请参阅

setErrorState()

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property animatedᅟ: bool

此属性表示是否启用了动画。

此属性的默认值为true

另请参阅 addAnimation()

Access functions:
property errorStringᅟ: str

此属性保存此状态机的错误字符串。

Access functions:
property globalRestorePolicyᅟ: QState.RestorePolicy

此属性保存此状态机的状态恢复策略。

此属性的默认值为 DontRestoreProperties

Access functions:
property runningᅟ: bool

此属性保存此状态机的运行状态。

Access functions:
__init__([parent=None])
Parameters:

父对象QObject

使用给定的parent构造一个新的状态机。

__init__(childMode[, parent=None])
Parameters:

使用给定的childModeparent构建一个新的状态机。

警告

不要将childMode设置为ExclusiveStates以外的任何值,否则状态机将无效,并且可能无法正常工作。

addDefaultAnimation(animation)
Parameters:

动画QAbstractAnimation

为任何过渡添加默认的animation

addState(state)
Parameters:

状态QAbstractState

将给定的state添加到此状态机中。该状态成为顶级状态,并且状态机拥有该状态的所有权。

如果状态已经在不同的机器上,它将首先从其旧机器中移除,然后添加到这台机器中。

beginMicrostep(event)
Parameters:

事件QEvent

beginSelectTransitions(event)
Parameters:

事件QEvent

cancelDelayedEvent(id)
Parameters:

id – int

Return type:

布尔

取消由给定的id标识的延迟事件。该id应该是调用postDelayedEvent()返回的值。如果事件成功取消,则返回true,否则返回false

另请参阅

postDelayedEvent()

clearError()

清除状态机的错误字符串和错误代码。

configuration()
Return type:

.QSetQAbstractState

返回此状态机当前所处的最大一致状态集(包括并行状态和最终状态)。如果状态s在配置中,则s的父状态也始终在配置中。但请注意,状态机本身并不是配置的显式成员。

endMicrostep(event)
Parameters:

事件QEvent

endSelectTransitions(event)
Parameters:

事件QEvent

error()
Return type:

错误

返回状态机中发生的最后一个错误的错误代码。

errorString()
Return type:

字符串

返回状态机中发生的最后一个错误的错误字符串。

属性 errorStringᅟ 的获取器。

globalRestorePolicy()
Return type:

RestorePolicy

返回状态机的恢复策略。

属性 globalRestorePolicyᅟ 的获取器。

isAnimated()
Return type:

布尔

返回此状态机是否启用了动画。

属性 animatedᅟ 的获取器。

isRunning()
Return type:

布尔

属性 runningᅟ 的获取器。

postDelayedEvent(event, delay)
Parameters:
  • eventQEvent

  • delay – int

Return type:

整数

将给定的event发布以供此状态机处理,并带有给定的delay(以毫秒为单位)。返回与延迟事件关联的标识符,如果无法发布事件,则返回-1。

此函数立即返回。当延迟时间到期后,事件将被添加到状态机的事件队列中进行处理。状态机拥有该事件的所有权,并在处理完成后删除它。

只有当状态机运行时,您才能发布事件。

postEvent(event[, priority=QStateMachine.EventPriority.NormalPriority])
Parameters:

将给定的eventpriority提交给此状态机进行处理。

此函数立即返回。事件被添加到状态机的事件队列中。事件按发布的顺序处理。状态机拥有事件的所有权,并在处理完毕后删除它。

您只能在状态机运行时或启动时发布事件。

另请参阅

postDelayedEvent()

removeDefaultAnimation(animation)
Parameters:

动画QAbstractAnimation

从默认动画列表中移除 animation

removeState(state)
Parameters:

状态QAbstractState

从该状态机中移除给定的state。状态机释放对该状态的所有权。

另请参阅

addState()

runningChanged(running)
Parameters:

运行中 – bool

当运行属性被更改时,会发出此信号,running 作为参数。

另请参阅

running

属性 runningᅟ 的通知信号。

setAnimated(enabled)
Parameters:

enabled – 布尔值

设置是否为此状态机启用动画。

另请参阅

isAnimated()

属性 animatedᅟ 的设置器。

setGlobalRestorePolicy(restorePolicy)
Parameters:

restorePolicyRestorePolicy

设置状态机的恢复策略为 restorePolicy。默认的恢复策略是 DontRestoreProperties

另请参阅

globalRestorePolicy()

属性 globalRestorePolicyᅟ 的设置器。

setRunning(running)
Parameters:

运行中 – bool

另请参阅

isRunning()

属性 runningᅟ 的设置器。

start()

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

注意

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

另请参阅

started() finished() stop() initialState() setRunning()

started()

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

另请参阅

finished() start()

stop()

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

stopped()

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

另请参阅

stop() finished()

class WrappedEvent

WrappedEvent 类继承自 QEvent 并持有与 QObject 关联的事件克隆。More_

PySide6.QtStateMachine.QStateMachine.WrappedEvent 的继承图

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

一个包装事件是由QStateMachine响应Qt事件生成的。QEventTransition类提供了与此类事件相关的过渡。WrappedEventQt状态机概述的一部分。

object() 函数返回生成事件的对象。event() 函数返回原始事件的克隆。

另请参阅

QEventTransition

__init__(object, event)
Parameters:
event()
Return type:

QEvent

返回原始事件的克隆。

object()
Return type:

QObject

返回与事件关联的对象。

class SignalEvent

SignalEvent 类表示一个 Qt 信号事件。More_

PySide6.QtStateMachine.QStateMachine.SignalEvent 的继承图

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

信号事件是由QStateMachine响应Qt信号生成的。QSignalTransition类提供了与信号事件相关的过渡。SignalEventQt状态机框架的一部分。

sender() 函数返回生成信号的对象。signalIndex() 函数返回信号的索引。arguments() 函数返回信号的参数。

另请参阅

QSignalTransition

__init__(sender, signalIndex, arguments)
Parameters:
  • senderQObject

  • signalIndex – int

  • arguments – QVariant 的列表

arguments()
Return type:

.QVariant 列表

返回信号的参数。

sender()
Return type:

QObject

返回发出信号的对象。

另请参阅

sender()

signalIndex()
Return type:

整数

返回信号的索引。

另请参阅

method()