以下代码不会创建动画......但如果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();
答案 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);