acano
6th October 2011, 12:11
Hi everyone,
I am using the State Machine framework to simulate the behavious of some animations.
The problem is that when I do so the UI hangs.
Could someone help?, please.
Here is my code:
#include "frogs.h"
frogs::frogs(QWidget *parent) :
QThread()
{
imagenrana = new QLabel(parent);
imagenrana->setPixmap(QPixmap(":frog1.png"));
imagenrana->move(50, 50);
imagenrana->show();
imagenrana->setAttribute(Qt::WA_DeleteOnClose);
// imagenrana->close();
automataRana =new QStateMachine();
QState * sReposo = new QState();
QState * sMorir = new QState();
QState * sDescansar = new QState();
automataRana->addState(sReposo);
automataRana->addState(sMorir);
automataRana->addState(sDescansar);
sReposo->addTransition(this, SIGNAL(tocada()), sMorir);
sReposo->addTransition(this, SIGNAL(cansada()), sDescansar);
connect(sReposo, SIGNAL(entered()), this, SLOT (esperar()));
connect(sDescansar, SIGNAL(entered()), this, SLOT (esconder()));
connect(sMorir, SIGNAL(entered()), this, SLOT (morir()));
automataRana->setInitialState(sReposo);
}
void frogs::run() {
automataRana->start();
// QThread::sleep(5);
// imagenrana->close();
}
void frogs::esperar() {
QThread::sleep(5);
// for (int i=0;i<5;i++) {
// sleep(1);
// this->exec();
// }
emit cansada() ;
}
void frogs::esconder() {
imagenrana->close();
this->~QThread();
}
void frogs::morir() {
this->~QThread();
}
Here is how I call the thread:
frogs * rana = new frogs(background);
rana->start();
I am using the State Machine framework to simulate the behavious of some animations.
The problem is that when I do so the UI hangs.
Could someone help?, please.
Here is my code:
#include "frogs.h"
frogs::frogs(QWidget *parent) :
QThread()
{
imagenrana = new QLabel(parent);
imagenrana->setPixmap(QPixmap(":frog1.png"));
imagenrana->move(50, 50);
imagenrana->show();
imagenrana->setAttribute(Qt::WA_DeleteOnClose);
// imagenrana->close();
automataRana =new QStateMachine();
QState * sReposo = new QState();
QState * sMorir = new QState();
QState * sDescansar = new QState();
automataRana->addState(sReposo);
automataRana->addState(sMorir);
automataRana->addState(sDescansar);
sReposo->addTransition(this, SIGNAL(tocada()), sMorir);
sReposo->addTransition(this, SIGNAL(cansada()), sDescansar);
connect(sReposo, SIGNAL(entered()), this, SLOT (esperar()));
connect(sDescansar, SIGNAL(entered()), this, SLOT (esconder()));
connect(sMorir, SIGNAL(entered()), this, SLOT (morir()));
automataRana->setInitialState(sReposo);
}
void frogs::run() {
automataRana->start();
// QThread::sleep(5);
// imagenrana->close();
}
void frogs::esperar() {
QThread::sleep(5);
// for (int i=0;i<5;i++) {
// sleep(1);
// this->exec();
// }
emit cansada() ;
}
void frogs::esconder() {
imagenrana->close();
this->~QThread();
}
void frogs::morir() {
this->~QThread();
}
Here is how I call the thread:
frogs * rana = new frogs(background);
rana->start();