PDA

View Full Version : flickering in frame moving animation



Seth90
23rd April 2011, 13:55
Hi guys,

i try to do this simple animation:

http://marcoseverini.net/xweb/question.jpg

the layout of window is grid (for window autoresize).

the first animation where frame 1 go out run correctly, but the second animation where frame 2 go inside the window not run correctly... the animation flicker...

this is the code:
[where:
Button 1=ButtonLogin;
Frame 1= login;
frame 2= linkedin;]


//QWidget_home.cpp

Home::Home(QWidget *parent) :
QWidget(parent),
ui(new Ui::Home)
{
ui->setupUi(this);
inizio();
}

void Home::inizio()
{
databaseOn(); //read data from sql Database
hideall();
ui->Login->show(); //show the frame 1

//set the image and labels in all frame
QPixmap immagine(":/immagine1.jpg");
ui->labelimage->setPixmap(immagine);
QPixmap immaginelogin(":/loginlogo.png");
ui->labelloginimage->setPixmap(immaginelogin);
ui->linePassword->setEchoMode(QLineEdit::Password);
QPixmap immaginewelcome(":/welcome.png");
ui->labelWelcome->setPixmap(immaginewelcome);
}

void Home::hideall(){ //hide all
ui->Login->hide();
ui->Linkedin->hide();
ui->ModificaProfilo->hide();
}

//[...]

void Home::on_pushButtonLogin_clicked()
{

//convert data in form for the database (is a vector)
bool logged=true;
QString * s= new QString[2];
s[0]=ui->lineUsername->text();
s[1]=ui->linePassword->text();
try{
cercami(s);
}catch (errori){
ui->lineUsername->clear();
ui->linePassword->clear();
logged=false;
}
//try to read data from vector

try {
scriviProfilo(logged); //try to complete the label of frame linkedin with database information
} catch (errori) {}

//show frame 2
showLinkedin();

}

//[...]

void Home::showLinkedin() { //hide the frame1


int dimensioneLarghezza=geometry().width()-24;
int dimensioneAltezza=geometry().height()-24;
int dimensioneX=12;//ui->Login->geometry().x();
int dimensioneY=12;//ui->Login->geometry().y();
int surplus=geometry().width()-24;

QPropertyAnimation *animation = new QPropertyAnimation(ui->Login, "geometry");
animation->setDuration(500);
animation->setStartValue(QRect(dimensioneX,dimensioneY,dimens ioneLarghezza ,dimensioneAltezza ));
animation->setEndValue(QRect(-(dimensioneX+surplus),dimensioneY, dimensioneLarghezza ,dimensioneAltezza));
animation->setEasingCurve(QEasingCurve::InOutExpo);
animation->start(QAbstractAnimation::DeleteWhenStopped);
connect(animation, SIGNAL(finished()), SLOT(hideLoginAnimationEnd())); //when is hide show frame 2
}

void Home::hideLoginAnimationEnd(){ //show frame 2
ui->Login->hide();

ui->Linkedin->show();

qDebug()<<geometry().width();
qDebug()<<geometry().height();
int dimensioneLarghezza=geometry().width()-24;
int dimensioneAltezza=geometry().height()-24;
int dimensioneX=12;
int dimensioneY=12;
int surplus=geometry().width()-24;



QPropertyAnimation *animation = new QPropertyAnimation(ui->Linkedin, "geometry");
animation->setDuration(500);
animation->setStartValue(QRect(dimensioneX+surplus,dimensione Y, dimensioneLarghezza, dimensioneAltezza));
animation->setEndValue(QRect(dimensioneX,dimensioneY, dimensioneLarghezza, dimensioneAltezza));
animation->setEasingCurve(QEasingCurve::InOutExpo);
animation->start();
}


someone can help me?

Thanks.