QState 类

QState 类为 QStateMachine 提供了一个通用状态。 更多信息...

头文件 #include <QState>
CMakefind_package(Qt6 REQUIRED COMPONENTS StateMachine)
target_link_libraries(mytarget PRIVATE Qt6::StateMachine)
qmakeQT += statemachine
继承 QAbstractState
继承自

QStateMachine

公共类型

枚举ChildMode { ExclusiveStates, ParallelStates }
枚举RestorePolicy { DontRestoreProperties, RestoreProperties }

属性

公共函数

QState(QState *parent = nullptr)
QState(QState::ChildMode childMode, QState *parent = nullptr)
虚拟~QState()
voidaddTransition(QAbstractTransition *transition)
QSignalTransition *addTransition(const QObject *sender, const char *signal, QAbstractState *target)
QSignalTransition *addTransition(const QObject *sender, PointerToMemberFunction signal, QAbstractState *target)
QAbstractTransition *addTransition(QAbstractState *target)
voidassignProperty(QObject *object, const char *name, const QVariant &value)
QBindable<QState::ChildMode>bindableChildMode()
QBindable<QAbstractState *>bindableErrorState()
QBindable<QAbstractState *>bindableInitialState()
QState::ChildModechildMode() const
QAbstractState *errorState() const
QAbstractState *initialState() const
voidremoveTransition(QAbstractTransition *transition)
voidsetChildMode(QState::ChildMode mode)
voidsetErrorState(QAbstractState *state)
voidsetInitialState(QAbstractState *state)
QList<QAbstractTransition *>transitions() const

信号

重写的保护函数

虚拟 bool事件(QEvent *event) 覆盖
虚 voidonEntry(QEvent *event) 覆盖
虚 voidonExit(QEvent *event) 覆盖

详细描述

QState 对象可以拥有子状态,并且可以转换到其他状态。QState 是 Qt 状态机框架的一部分。

addTransition() 函数添加转换。 removeTransition() 函数移除转换。 transitions() 函数返回状态的输出转换。

assignProperty() 函数用于定义在进入状态时应执行的结构体属性赋值。

顶层状态必须将 QStateMachine 对象作为其父状态传递,或者使用 QStateMachine::addState() 将其添加到状态机中。

具有子状态的状态

childMode 属性确定如何处理子状态。对于非并行状态组,必须调用 setInitialState() 函数来设置初始状态。子状态是互斥状态,状态机需要知道父状态是转换的目标时将进入哪个子状态。

当进入最终子状态 (QFinalState) 时,状态将发出 QState::finished() 信号。

setErrorState() 设置状态的错误状态。错误状态是在尝试进入状态时检测到错误时,状态机将转换到的状态(例如,因为没有设置初始状态)。

成员类型文档

枚举 QState::ChildMode

此枚举指定如何处理状态的孩子状态。

常量描述
QState::ExclusiveStates0子状态是互斥的,必须调用 QState::setInitialState() 来设置初始状态。
QState::ParallelStates1子状态是并行的。当进入父状态时,所有子状态都将并行进入。

枚举 QState::RestorePolicy

此枚举指定恢复策略类型。当机器进入设置一个或多个属性的状态时,恢复策略生效。

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

将保存任何给定属性的任何初始值。如果状态机已保存属性值,则只有在属性成功恢复后才会覆盖。

常量描述
QState::DontRestoreProperties0状态机不应保存属性的初始值并在以后恢复它们。
QState::RestoreProperties1状态机应保存属性的初始值并在以后恢复它们。

另请参阅QStateMachine::globalRestorePolicyQState::assignProperty

属性文档

[可绑定] childMode : ChildMode

注意:此属性支持QProperty绑定。

此属性保留此状态的子模式

此属性的默认值是QState::ExclusiveStates

[可绑定] errorState : QAbstractState*

注意:此属性支持QProperty绑定。

此属性保留此状态的错误状态

[可绑定] initialState : QAbstractState*

注意:此属性支持QProperty绑定。

此属性保留此状态的初始状态(其子状态之一)

成员函数文档

QState::QState(QState *parent = nullptr)

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

QState::QState(QState::ChildMode childMode, QState *parent = nullptr)

使用给定的childMode和给定的parent状态构建一个新的状态。

[虚拟 noexcept] QState::~QState()

销毁此状态。

void QState::addTransition(QAbstractTransition *transition)

添加给定的transition。转换具有此状态作为源。此状态拥有转换的所有权。

QSignalTransition *QState::addTransition(const QObject *sender, const char *signal, QAbstractState *target)

添加与给定sender对象的给定signal相关的转换,并返回新的QSignalTransition对象。转换具有此状态作为源,给定target作为目标状态。

template <typename PointerToMemberFunction> QSignalTransition *QState::addTransition(const QObject *sender, PointerToMemberFunction signal, QAbstractState *target)

这是一个重载函数。

添加与给定sender对象的给定signal相关的转换,并返回新的QSignalTransition对象。转换具有此状态作为源,给定target作为目标状态。

QAbstractTransition *QState::addTransition(QAbstractState *target)

向给定target状态添加无条件转换,并返回新的转换对象。

void QState::assignProperty(QObject *object, const char *name, const QVariant &value)

当进入此状态时,指示此状态将给定的name的属性设置给给定的object和给定的value

另请参阅已分配的属性

QState::ChildMode QState::childMode() const

返回此状态的孩子模式。

注意:这是属性childMode的获取函数。

另请参阅setChildMode

[私有信号] void QState::childModeChanged()

childMode属性更改时,会发射此信号。

注意:这是一个私有信号。它可以用于信号连接,但不能由用户发射。

注意:这是属性<ページモード>的属性更改通知器信号。

另请参阅QState::childMode

QAbstractState *QState::errorState() const

返回此状态的错误状态。

注意:这是属性errorState的获取函数。

另请参阅setErrorStateQStateMachine::error

[私有信号] void QState::errorStateChanged()

errorState属性更改时,会发射此信号。

注意:这是一个私有信号。它可以用于信号连接,但不能由用户发射。

注意:这是属性errorState的通知器信号。

另请参阅QState::errorState

[重写虚拟受保护] bool QState::event(QEvent *e)

重新实现:QAbstractState::event(QEvent *e)。

[私有信号] void QState::finished()

当进入此状态的一个最终子状态时,会发射此信号。

注意:这是一个私有信号。它可以用于信号连接,但不能由用户发射。

另请参阅QFinalState

QAbstractState *QState::initialState() const

返回此状态的首个状态,如果没有首个状态则为nullptr

注意:这是属性initialState的获取函数。

另请参阅setInitialState

[私有信号] void QState::initialStateChanged()

initialState属性更改时,会发射此信号。

注意:这是一个私有信号。它可以用于信号连接,但不能由用户发射。

注意:这是属性initialState的通知器信号。

另请参阅QState::initialState

[重写虚拟受保护] void QState::onEntry(QEvent *event)

重新实现:QAbstractState::onEntry(QEvent *event)。

[重写虚受保护] void QState::onExit(QEvent *event)

重实现: QAbstractState::onExit(QEvent *event).

[私有信号] void QState::propertiesAssigned()

当所有属性都已分配其最终值时,发出此信号。如果状态为存在动画的一个或多个属性分配了值(无论是设置在转换上还是作为状态机的默认动画),则只有在所有此类动画完成后才会发出信号。

如果没有相关动画,或者没有为状态定义属性分配,则信号将在此状态进入之前立即发出。

另请参阅 QState::assignProperty() 和 QAbstractTransition::addAnimation()

注意:这是一个私有信号。它可以用于信号连接,但不能由用户发射。

void QState::removeTransition(QAbstractTransition *transition)

从该状态中删除指定的 transition。状态释放了对转换的所有权。

另请参阅 addTransition().

void QState::setChildMode(QState::ChildMode mode)

设置此状态的孩子 模式

注意:属性 childMode 的设置函数。

另请参阅 childMode().

void QState::setErrorState(QAbstractState *state)

将此状态的错误状态设置为给定的 状态。如果没有设置错误状态,或者它被设置为 nullptr,则状态将递归地继承其父状态的错误状态。如果状态或其任何祖先未设置错误状态,则错误会导致机器停止执行,并将错误打印到控制台。

注意:属性 errorState 的设置函数。

另请参阅 errorState().

void QState::setInitialState(QAbstractState *state)

将此状态的初始状态设置为给定的 状态状态 必须是该状态的孩子。

注意:属性 initialState 的设置函数。

另请参阅 initialState().

QList<QAbstractTransition *> QState::transitions() const

返回此状态的非转换(即,此状态是 源状态 的转换),如果没有转换则返回空列表。

另请参阅 addTransition().

© 2024 Qt公司。本文档中包含的贡献文档版权属于各自所有者。本提供的文档是根据自由软件基金会公布的GNU自由文档许可证第1.3版许可的。GNU自由文档许可证1.3版。Qt及其相应标志是Qt公司在芬兰及/或其他国家/地区的商标。所有其他商标均属其各自所有者。