2

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 の初心者です。ばかげた質問でしたらすみません。

4

1 に答える 1

3

QStateMachineオブジェクトはスコープ外になり、関数の最後で削除されます。動的に割り当てる必要があります。

QStateMachine *machine = new QStateMachine(this);
于 2012-12-27T13:47:21.960 に答える