2 votes

State Machine et Qt Designer

J'essaie de modifier l'exemple de la machine d'état de Qt. J'ai créé un QWidget dans Qt designer et j'ai ajouté un label et un bouton. Voici mon code

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";
}

Il fonctionne mais le fait de cliquer sur le bouton ne modifie pas le texte de l'étiquette. Où est-ce que je fais une erreur ? Je suis nouveau dans Qt, veuillez m'excuser si ma question est stupide.

3voto

alexisdm Points 16064

En QStateMachine sort de la portée et est supprimé à la fin de la fonction. Vous devriez l'allouer dynamiquement :

QStateMachine *machine = new QStateMachine(this);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X