My animation isn't working on this QPushButton quite the way I'm expecting.
Here's my mainwindow.cpp, as you can see nothing particularly weird here. On runtime the button appears as one might expect. I didn't have any particular movement in mind. I just wanted to see if I had set everything up correctly. As things are right now the button doesn't grow or move. What's strange here is that if I comment out the setShape.start() it defaults back to the size designated in the UI file.
My only guess thus far is that my MainWindow object isn't being displayed until after its constructor (containing the animation) has run its course. If this is the case, I'm wondering what I can do to get around it.
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QPushButton>
#include <QPropertyAnimation>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPropertyAnimation setShape(ui->pushButton, "geometry");
setShape.setDuration(1000);
setShape.setStartValue(QRect(500,300,500,500));
setShape.setEndValue(QRect(800,400,500,500));
setShape.start();
}
MainWindow::~MainWindow()
{
delete ui;
}
Here's my main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QPropertyAnimation>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
This is about as basic an animation as one could create, so I'm hoping that either my intuition on this is correct, or I'm making a silly mistake. Either way any help would be greatly appreciated.
A local variable is deleted after it finishes executing its scope, and that is what happens with setShape, it is eliminated when the constructor finishes executing, what you have to do is create a pointer so that it is maintained and establish the policy of destruction to DeleteWhenStopped
:
QPropertyAnimation *setShape = new QPropertyAnimation(ui->pushButton, "geometry");
setShape->setDuration(1000);
setShape->setStartValue(QRect(500,300,500,500));
setShape->setEndValue(QRect(800,400,500,500));
setShape->start(QPropertyAnimation::DeleteWhenStopped);