当状态机改变时,改变自身的自定义枚举变量的值;
点击按钮,状态切换,自身的枚举的变量也根据状态机改变
.h
#ifndef TESTPAGE_H
#define TESTPAGE_H
#include <QWidget>
namespace Ui {
class testPage;
}
class QStateMachine;
class testPage : public QWidget
{
Q_OBJECT
Q_PROPERTY(testPage::TestEnum mTestEnum READ testEnum WRITE setTestEnum)
public:
enum TestEnum{first=0,second,third};
Q_ENUM(TestEnum)//必须添加这行,需要把自定义枚举注册到元对象系统中
public:
explicit testPage(QWidget *parent = nullptr);
~testPage();
TestEnum testEnum() const;
void setTestEnum(const TestEnum &testEnum);
private:
Ui::testPage *ui;
QStateMachine *machine;
TestEnum mTestEnum;
};
#endif // TESTPAGE_H
.cpp
#include "testpage.h"
#include "ui_testpage.h"
#include<QStateMachine>
#include<QState>
#include<QDebug>
#include <QMetaEnum>
testPage::testPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::testPage),
mTestEnum(first)
{
ui->setupUi(this);
machine = new QStateMachine(this);
QState *s1 = new QState(machine);
QState *s2 = new QState(machine);
QState *s3 = new QState(machine);
s1->assignProperty(ui->pushButton,"text","s1");
s1->assignProperty(this,"mTestEnum",TestEnum::first);
s2->assignProperty(ui->pushButton,"text","s2");
s2->assignProperty(this,"mTestEnum",TestEnum::second);
s3->assignProperty(ui->pushButton,"text","s3");
s3->assignProperty(this,"mTestEnum",TestEnum::third);
s1->addTransition(ui->pushButton,&QPushButton::clicked,s2);
s2->addTransition(ui->pushButton,&QPushButton::clicked,s3);
s3->addTransition(ui->pushButton,&QPushButton::clicked,s1);
machine->setInitialState(s1);
machine->start();
}
testPage::~testPage()
{
delete ui;
}
testPage::TestEnum testPage::testEnum() const
{
return mTestEnum;
}
void testPage::setTestEnum(const TestEnum &testEnum)
{
qDebug()<<"set:"<<testEnum;
mTestEnum = testEnum;
}