Qt 使用状态机改变自定义枚举变量得值

17 篇文章 0 订阅

当状态机改变时,改变自身的自定义枚举变量的值;
在这里插入图片描述
点击按钮,状态切换,自身的枚举的变量也根据状态机改变

.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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青鸟青史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值