qt - 状态机和 Qt 设计器

标签 qt state-machine

我正在尝试修改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/

相关文章:

qt - 使用委托(delegate) (PySide/Qt/PyQt) 将项目的文本垂直居中

c++ - OpenCV + QML(从另一个线程抓取帧)

c++ - 当 C++ 中的值发生变化时如何触发动画 qml?

algorithm - 软件开发中的非确定性有限状态机?

programming-languages - 哪些编程语言支持语言级别的状态?

qt - 在安装目录之外的目录中编译 Qt 项目

c++ - Qt: 为什么断网后 `QAbstractSocket::error(QAbstractSocket::SocketError)`信号没有产生?

regex - 汤普森算法的否定?

Boost MSM,尽管 boost::any 被用作事件,但转换不会发生

design-patterns - 状态机是否需要公开其当前状态?