c++ - QPropertyAnimation 不工作

标签 c++ qt qt5 qpropertyanimation

我的动画在这个 QPushButton 上没有按照我预期的方式工作。

这是我的 mainwindow.cpp,因为您在这里看不到任何特别奇怪的地方。在运行时,该按钮如人们所期望的那样出现。我没有任何特别的 Action 。我只是想看看我是否正确设置了所有内容。由于现在的情况,按钮不会增长或移动。这里有什么奇怪的是,如果我注释掉 setShape.start() 它默认返回到 UI 文件中指定的大小。

到目前为止,我唯一的猜测是我的 MainWindow 对象在其构造函数(包含动画)运行完之后才会显示。如果是这种情况,我想知道我可以做些什么来解决它。

#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;
}

这是我的 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();
}

这是一个可以创建的最基本的动画,所以我希望我的直觉是正确的,或者我犯了一个愚蠢的错误。无论哪种方式,任何帮助都将不胜感激。

最佳答案

一个局部变量在它的作用域执行完之后就被删除了,setShape就是这样,构造函数执行完就被删除了,你要做的就是创建一个指针,让它得以维护并建立策略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);

关于c++ - QPropertyAnimation 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49848782/

相关文章:

qt - 当 Qt-5 连接失败时

c++ - 对数组结构进行排序

python - 如何在pyqt中删除QFrame

qt - QMake - 如何在 .pro 文件中添加和使用变量

date - 如何从 QML 日历返回的日期中提取日、月和年?

c++ - QtWebEngine - 找不到程序

c++ - std::map.insert "could not deduce template argument for..."

c++ - 简单的 OpenGL 代码总是导致段错误(Ubuntu 上的 C++,虚拟机)

c++ - 在一个代码块中多次互斥锁定一个变量,还是只锁定整个代码块,效率更高?

windows - 使用 CMake : Missing moc, uic、rcc 查找 Qt