PDA

View Full Version : Aid on QStateMachine



giorgik
27th April 2010, 10:00
file mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QVBoxLayout>

#include "macchinat.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

QPushButton *pulsanteEsci = new QPushButton("Premi per uscire");
QWidget *widget = new QWidget(this);
QVBoxLayout *btnLayout = new QVBoxLayout;
btnLayout->addWidget(pulsanteEsci);
widget->setLayout(btnLayout);
setCentralWidget(widget);
MacchinaT myMacchina(*pulsanteEsci, this);
}

file macchinat.h:
#include <QObject>
#include <QtGui/QPushButton>
#include <QtCore/QStateMachine>
#include <QtCore/QFinalState>

class MacchinaT : public QObject
{
Q_OBJECT

public:
MacchinaT(QPushButton &btn1, QObject *parent = 0);
QState *siniz;
QState *s1;
QFinalState *sfinal;

public slots:
void vaiFrmLogin();
void esci();

private:
QPushButton *F1;
};

file macchinat.cpp:
#include "macchinat.h"
#include <QDebug>

MacchinaT::MacchinaT(QPushButton &btn1, QObject *parent) :
QObject(parent)
{
F1 = &btn1;

QStateMachine *macchina = new QStateMachine(parent);

// crea la Macchina degli Stati e inizializzo gli Stati
siniz = new QState();
s1 = new QState();
sfinal = new QFinalState();

F1->setDisabled(false);

//--------- proprieta' F1 nei vari stati ---------
siniz->assignProperty(F1, "text", "siniz");
siniz->addTransition(F1, SIGNAL(clicked()), s1);
s1->assignProperty(F1, "text", "s1");
s1->addTransition(F1, SIGNAL(clicked()), sfinal);

// aggiunge gli stati alla Macchina degli Stati
macchina->addState(siniz);
macchina->addState(s1);
macchina->addState(sfinal);

connect(s1, SIGNAL(entered()), this, SLOT(vaiFrmLogin()));
connect(macchina, SIGNAL(finished()), this, SLOT(esci()));

// setta lo stato iniziale della Macchina degli Stati e avviala
macchina->setInitialState(siniz);
macchina->start();
}

void MacchinaT::vaiFrmLogin()
{
qDebug() << "vaiFrmLogin()";
}

void MacchinaT::esci()
{
qDebug() << "esci()";
}

It does not execute the connect !?! why?

giorgik
27th April 2010, 11:24
The problem is SIGNAL(entered()) for s1. Why?