我正在阅读文档,并试图了解qt状态机框架。
我的方法是从QState继承并重写onEntry函数,然后在Entry内部执行状态机的逻辑。我现在对如何进行条件转换感到困惑。我在onEntry内部的逻辑是从普通的开关盒机器改写的,并且该逻辑具有过渡。我将如何在函数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)从在a)中定义的addTransition
触发的状态开始的SIGNAL
;
c)从您的SIGNAL
代码中发出此onEntry
。
请注意,添加过渡时应使用排队连接。