2012-12-27 38 views
1

我想修改Qt的狀態機框架工作示例。我在Qt designer中創建了一個QWidget,並添加了一個標籤和按鈕。這是我的代碼狀態機和Qt設計器

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新手,請原諒,如果這是一個愚蠢的問題。

回答

2

QStateMachine對象超出範圍並在函數結束時被刪除。 您應該動態分配它:

QStateMachine *machine = new QStateMachine(this); 
+1

...或使其成爲會員。 –