PySide6.QtStateMachine.QStateMachine¶
- class QStateMachine¶
QStateMachine
类提供了一个分层的有限状态机。More_…概要¶
属性¶
animatedᅟ
- 是否启用动画errorStringᅟ
- 此状态机的错误字符串globalRestorePolicyᅟ
- 此状态机的状态恢复策略runningᅟ
- 此状态机的运行状态
方法¶
def
__init__()
def
addState()
def
clearError()
def
configuration()
def
error()
def
errorString()
def
isAnimated()
def
isRunning()
def
postEvent()
def
removeState()
def
setAnimated()
虚拟方法¶
def
beginMicrostep()
def
endMicrostep()
插槽¶
def
setRunning()
def
start()
def
stop()
信号¶
def
runningChanged()
def
started()
def
stopped()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QStateMachine
基于 Statecharts 的概念和符号。QStateMachine
是 Qt 状态机框架 的一部分。状态机管理一组状态(继承自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
,它继承了QAbstractState。QState
类提供了一个状态,您可以在进入或退出状态时使用它来设置属性并调用QObjects上的方法。它还包含用于添加转换的便捷函数,例如本示例中的QSignalTransition。有关更多详细信息,请参阅QState
类描述。如果遇到错误,机器将寻找一个
error state
,如果有可用的错误状态,它将进入这个状态。可能的错误类型由Error
枚举描述。进入错误状态后,可以使用error()
检索错误的类型。进入错误状态后,状态图的执行不会停止。如果没有适用于错误状态的错误状态,机器将停止执行,并将错误消息打印到控制台。注意
重要提示:将状态机的
ChildMode
设置为并行(ParallelStates
)会导致状态机无效。它只能设置为(或保持为)ExclusiveStates
。另请参阅
QAbstractState
QAbstractTransitionQState
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 中添加。另请参阅
注意
当使用
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:
使用给定的
parent
构造一个新的状态机。使用给定的
childMode
和parent
构建一个新的状态机。警告
不要将
childMode
设置为ExclusiveStates
以外的任何值,否则状态机将无效,并且可能无法正常工作。- addDefaultAnimation(animation)¶
- Parameters:
动画 –
QAbstractAnimation
为任何过渡添加默认的
animation
。- addState(state)¶
- Parameters:
状态 –
QAbstractState
将给定的
state
添加到此状态机中。该状态成为顶级状态,并且状态机拥有该状态的所有权。如果状态已经在不同的机器上,它将首先从其旧机器中移除,然后添加到这台机器中。
- cancelDelayedEvent(id)¶
- Parameters:
id – int
- Return type:
布尔
取消由给定的
id
标识的延迟事件。该id应该是调用postDelayedEvent()
返回的值。如果事件成功取消,则返回true
,否则返回false
。另请参阅
- clearError()¶
清除状态机的错误字符串和错误代码。
- configuration()¶
- Return type:
.QSetQAbstractState
返回此状态机当前所处的最大一致状态集(包括并行状态和最终状态)。如果状态
s
在配置中,则s
的父状态也始终在配置中。但请注意,状态机本身并不是配置的显式成员。返回状态机中发生的最后一个错误的错误代码。
- errorString()¶
- Return type:
字符串
返回状态机中发生的最后一个错误的错误字符串。
属性
errorStringᅟ
的获取器。- globalRestorePolicy()¶
- Return type:
返回状态机的恢复策略。
属性
globalRestorePolicyᅟ
的获取器。- isAnimated()¶
- Return type:
布尔
返回此状态机是否启用了动画。
属性
animatedᅟ
的获取器。- isRunning()¶
- Return type:
布尔
属性
runningᅟ
的获取器。将给定的
event
发布以供此状态机处理,并带有给定的delay
(以毫秒为单位)。返回与延迟事件关联的标识符,如果无法发布事件,则返回-1。此函数立即返回。当延迟时间到期后,事件将被添加到状态机的事件队列中进行处理。状态机拥有该事件的所有权,并在处理完成后删除它。
只有当状态机运行时,您才能发布事件。
- postEvent(event[, priority=QStateMachine.EventPriority.NormalPriority])¶
- Parameters:
event –
QEvent
priority –
EventPriority
将给定的
event
和priority
提交给此状态机进行处理。此函数立即返回。事件被添加到状态机的事件队列中。事件按发布的顺序处理。状态机拥有事件的所有权,并在处理完毕后删除它。
您只能在状态机运行时或启动时发布事件。
另请参阅
- removeDefaultAnimation(animation)¶
- Parameters:
动画 –
QAbstractAnimation
从默认动画列表中移除
animation
。- removeState(state)¶
- Parameters:
状态 –
QAbstractState
从该状态机中移除给定的
state
。状态机释放对该状态的所有权。另请参阅
- runningChanged(running)¶
- Parameters:
运行中 – bool
当运行属性被更改时,会发出此信号,
running
作为参数。另请参阅
running
属性
runningᅟ
的通知信号。- setAnimated(enabled)¶
- Parameters:
enabled – 布尔值
设置是否为此状态机启用动画。
另请参阅
属性
animatedᅟ
的设置器。- setGlobalRestorePolicy(restorePolicy)¶
- Parameters:
restorePolicy –
RestorePolicy
设置状态机的恢复策略为
restorePolicy
。默认的恢复策略是DontRestoreProperties
。属性
globalRestorePolicyᅟ
的设置器。- setRunning(running)¶
- Parameters:
运行中 – bool
另请参阅
属性
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_…概要¶
方法¶
def
__init__()
def
event()
def
object()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
一个包装事件是由
QStateMachine
响应Qt事件生成的。QEventTransition
类提供了与此类事件相关的过渡。WrappedEvent
是Qt状态机概述的一部分。object()
函数返回生成事件的对象。event()
函数返回原始事件的克隆。另请参阅
返回原始事件的克隆。
返回与事件关联的对象。
- class SignalEvent¶
SignalEvent
类表示一个 Qt 信号事件。More_…概要¶
方法¶
def
__init__()
def
arguments()
def
sender()
def
signalIndex()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
信号事件是由
QStateMachine
响应Qt信号生成的。QSignalTransition类提供了与信号事件相关的过渡。SignalEvent
是Qt状态机框架的一部分。sender()
函数返回生成信号的对象。signalIndex()
函数返回信号的索引。arguments()
函数返回信号的参数。另请参阅
- __init__(sender, signalIndex, arguments)¶
- Parameters:
sender –
QObject
signalIndex – int
arguments – QVariant 的列表
- arguments()¶
- Return type:
.QVariant 列表
返回信号的参数。
返回发出信号的对象。
另请参阅
- signalIndex()¶
- Return type:
整数
返回信号的索引。
另请参阅
method()