gpt4 book ai didi

qt - 状态机和 Qt 设计器

转载 作者:行者123 更新时间:2023-12-04 05:17:40 29 4
gpt4 key购买 nike

我正在尝试修改 Qt 的状态机框架工作示例。我在 Qt 设计器中创建了一个 QWidget 并添加了一个标签和按钮。这是我的代码

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
setupStateMachine();
}

void MainWindow:: setupStateMachine()
{
QStateMachine machine;
QState *s1 = new QState();
QState *s2 = new QState();
QState *s3 = new QState();

s1->assignProperty(ui->label, "text", "In state s1");
s2->assignProperty(ui->label, "text", "In state s2");
s3->assignProperty(ui->label, "text", "In state s3");

s1->addTransition(this->ui->button, SIGNAL(clicked()), s2);
s2->addTransition(this->ui->button, SIGNAL(clicked()), s3);
s3->addTransition(this->ui->button, SIGNAL(clicked()), s1);

machine.addState(s1);
machine.addState(s2);
machine.addState(s3);
machine.setInitialState(s1);

machine.start();

qDebug() << "State Machine Created";
}

它正在运行,但单击按钮不会更改标签文本。我哪里出错了?我是 Qt 新手,如果这是一个愚蠢的问题,请原谅。

最佳答案

QStateMachine对象超出范围并在函数结束时被删除。
您应该动态分配它:

QStateMachine *machine = new QStateMachine(this);

关于qt - 状态机和 Qt 设计器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054427/

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