gpt4 book ai didi

c++ - Qt状态机

转载 作者:行者123 更新时间:2023-11-28 05:43:30 25 4
gpt4 key购买 nike

我正在阅读文档并试图了解 qt statemachine 框架。

我的方法是继承自 QState 并覆盖 onEntry 函数,然后我在 Entry 内部执行状态机的逻辑。我现在对如何进行条件转换感到困惑。我在 onEntry 中的逻辑是从普通的 switch case 机器重写的,并且该逻辑具有转换。我将如何在函数 OnEntry 中设置转换。有人可以显示示例代码吗?

class s : public QState
{
public:
s(QState *parent = 0);
~s();
protected:
void onEntry(QEvent *event) override;
void onExit(QEvent *event) override;

};

s::s(QState *parent): QState(parent)
{

}

s::~s()
{

}

void s::onEntry(QEvent *event)
{
qDebug("on enter");
}

void s::onExit(QEvent *event)
{

}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStateMachine * m_machine = new QStateMachine();

QState *rootState = new QState(m_machine);
m_machine->setInitialState(rootState);
s *state = new s(m_machine);

m_machine->start();
}

MainWindow::~MainWindow()
{
delete ui;
}

最佳答案

使用addTransition 从这个State 添加转换。如果你想从 onEntry 代码触发转换,你可能应该

a) 从这个对象定义一个新的SIGNAL

b) addTransition 从这个状态触发在 a) 中定义的 SIGNAL;

c) 从您的 onEntry 代码发出此 SIGNAL

请注意,添加过渡时应使用排队连接。

关于c++ - Qt状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36670158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com