首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPropertyAnimation不工作

QPropertyAnimation不工作
EN

Stack Overflow用户
提问于 2013-03-23 05:30:09
回答 2查看 6.4K关注 0票数 5

我正在尝试在Qt桌面应用程序中测试动画。我只是复制了help中的示例。点击按钮后,新按钮只是出现在左上角,没有动画(甚至结束位置是错误的)。我是不是遗漏了什么?

Qt 5.0.1,Linux Mint 64位,GTK

代码语言:javascript
复制
#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();
}

编辑:已解决。动画对象必须作为全局引用。例如,在私有QPropertyAnimation *动画部分。则QPropertyAnimation =新建(...);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-23 05:50:08

您只是没有复制这个示例,您还做了一些破坏它的更改。您的animation变量现在是在on_pushButton_clicked函数结束时销毁的局部变量。使QPropertyAnimation实例成为MainWindow类的成员变量,并按如下方式使用它:

代码语言:javascript
复制
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();
}
票数 6
EN

Stack Overflow用户

发布于 2013-03-23 14:58:40

您不需要专门为删除mAnimation变量创建一个插槽。如果您使用QAbstractAnimation::DeleteWhenStopped,Qt可以为您做到这一点

代码语言:javascript
复制
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);
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15580171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档