关于QPropertyAnimation的新版本或实例有什么区别?

时间:2012-02-12 04:57:59

标签: qt

以下代码不会创建动画......但如果QPropertyAnimation是一个新实例,那么它可以..为什么?有什么不同 ?谢谢......

        QRect orgRect = this->geometry();
        QRect endRect = btExpand ? QRect(*ptNotePadPot, COLLAPSE_SIZE) : 
                                   QRect(*ptNotePadPot, EXPAND_SIZE);
     /*
        QPropertyAnimation* amt = new QPropertyAnimation(this, "geometry", this);
        amt->setDuration(10000);
        amt->setStartValue(orgRect);
        amt->setEndValue(endRect);
        amt->start();
    */
        QPropertyAnimation amt(this, "geometry", this);
        amt.setDuration(10000);
        amt.setStartValue(orgRect);
        amt.setEndValue(endRect);
        amt.start();

2 个答案:

答案 0 :(得分:2)

启动后,QProperyAnimation将创建自己的计时器并在主线程外运行。

QPropertyAnimation amt(this, "geometry", this);

在运行指针退出函数范围后它将被销毁。

否则,如果你使用

QPropertyAnimation* amt = new QPropertyAnimation(this, "geometry", this);

你将在内存中创建一个动画对象来工作,它由amt指针指向。 运行指针退出函数作用域后,指针将被删除,而不是QPropertyAnimation对象。

但如果你不删除它,它将成为memmory中的僵尸。

最好的方法是,为QPropertyAnimation指针使用类变量。因此,您可以在程序关闭后或任何需要时删除指针中的对象。

我希望它有所帮助.. 我的英语不好。

答案 1 :(得分:0)

在没有内存泄漏的情况下解决此问题的更好方法是调用start()方法,如下所示:

animation->start(QAbstractAnimation::DeleteWhenStopped);