5

Qtデスクトップアプリケーションでアニメーションをテストしようとしています。ヘルプから例をコピーしました。ボタンをクリックすると、アニメーションなしで新しいボタンが左上隅に表示されます(終了位置も間違っています)。私は何かが足りないのですか?

Qt 5.0.1、Linux Mint 64ビット、GTK

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPropertyAnimation>

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

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QPushButton *button = new QPushButton("Animated Button", this);
    button->show();

    QPropertyAnimation animation(button, "geometry");
    animation.setDuration(10000);
    animation.setStartValue(QRect(0, 0, 100, 30));
    animation.setEndValue(QRect(250, 250, 100, 30));

    animation.start();
}

編集:解決しました。アニメーションオブジェクトはグローバル参照である必要があります。たとえば、セクションprivate QPropertyAnimation*animationにあります。次に、QPropertyAnimation = New(....);

4

2 に答える 2

11

mAnimation変数を削除するために特別にスロットを作成する必要はありません。あなたが使用する場合、Qtはあなたのためにそれを行うことができますQAbstractAnimation::DeleteWhenStopped

QPropertyAnimation *mAnimation = new QPropertyAnimation(button, "geometry");
mAnimation->setDuration(10000);
mAnimation->setStartValue(QRect(0, 0, 100, 30));
mAnimation->setEndValue(QRect(250, 250, 100, 30));

mAnimation->start(QAbstractAnimation::DeleteWhenStopped);
于 2013-03-23T06:58:40.357 に答える
7

例をコピーしなかっただけで、それを壊すいくつかの変更も加えました。これanimationで、変数は関数の終了時に破棄されるローカル変数になりon_pushButton_clickedます。QPropertyAnimationインスタンスをMainWindowクラスのメンバー変数にして、次のように使用します。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow), mAnimation(0)
{
    ui->setupUi(this);
    QPropertyAnimation animation
}

MainWindow::~MainWindow()
{
    delete mAnimation;
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QPushButton *button = new QPushButton("Animated Button", this);
    button->show();

    mAnimation = new QPropertyAnimation(button, "geometry");
    mAnimation->setDuration(10000);
    mAnimation->setStartValue(QRect(0, 0, 100, 30));
    mAnimation->setEndValue(QRect(250, 250, 100, 30));

    mAnimation->start();
}
于 2013-03-22T21:50:08.110 に答える