状态机和Qt设计师

时间:2012-12-27 12:05:56

标签: qt state-machine

我正在尝试修改Qt的State Machine框架工作示例。我在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的新人,如果这是一个愚蠢的问题,请原谅我。

1 个答案:

答案 0 :(得分:3)

QStateMachine对象超出范围并在函数末尾被删除。 你应该动态分配它:

QStateMachine *machine = new QStateMachine(this);