好看的美食怎么做视频网站,wordpress页面改风格,wordpress 锚文本,王野天津卫视基本概念
QStateMachine#xff1a;管理一组状态和转换的状态机。QState#xff1a;表示状态机中的一个状态。QSignalTransition#xff1a;根据发射的信号触发状态之间的转换。
示例逻辑
假设您有三个主要状态#xff1a;值守#xff08;Daemon#xff09;、做样管理一组状态和转换的状态机。QState表示状态机中的一个状态。QSignalTransition根据发射的信号触发状态之间的转换。
示例逻辑
假设您有三个主要状态值守Daemon、做样Sampling、异常处理ErrorHandling。我们将创建一个状态机来管理这些状态的转换。
步骤 1定义状态机和状态
// 创建状态机
QStateMachine* machine new QStateMachine(this);// 创建状态
QState* daemonState new QState(machine);
QState* samplingState new QState(machine);
QState* errorHandlingState new QState(machine);// 设置状态对象名便于调试
daemonState-setObjectName(Daemon);
samplingState-setObjectName(Sampling);
errorHandlingState-setObjectName(ErrorHandling);步骤 2配置状态转换
// 值守状态转到做样状态
daemonState-addTransition(this, SIGNAL(startSampling()), samplingState);// 做样状态结束后返回值守状态
samplingState-addTransition(this, SIGNAL(samplingFinished()), daemonState);// 从任意状态转到异常处理状态
daemonState-addTransition(this, SIGNAL(errorOccurred()), errorHandlingState);
samplingState-addTransition(this, SIGNAL(errorOccurred()), errorHandlingState);// 异常处理结束后返回值守状态
errorHandlingState-addTransition(this, SIGNAL(errorResolved()), daemonState);步骤 3为状态添加入口和退出动作
// 当进入做样状态
QObject::connect(samplingState, QState::entered, [this]() {qDebug() Entering Sampling State;// 这里可以放置做样的逻辑
});// 当离开做样状态
QObject::connect(samplingState, QState::exited, [this]() {qDebug() Exiting Sampling State;
});// 对于其他状态也可以进行类似的操作步骤 4启动状态机
// 设置初始状态
machine-setInitialState(daemonState);// 启动状态机
machine-start();使用信号和槽进行状态转换
假设您有函数来处理具体的操作比如开始做样和处理异常您可以在这些函数中发射上面定义的信号来触发状态转换。
小结
初始化创建状态机和状态然后定义状态间的转换。动作为每个状态的进入和退出定义动作。转换基于事件信号触发状态转换。