代码如下所示并没有创建动画..。但是如果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();发布于 2012-02-12 05:08:44
启动后,QProperyAnimation将创建自己的计时器,并在主线程之外运行。
QPropertyAnimation amt(this, "geometry", this);在运行指针退出功能范围后,它将被销毁。
否则如果你用
QPropertyAnimation* amt = new QPropertyAnimation(this, "geometry", this);您将在内存中创建一个要工作的动画对象,并由amt指针指向它。在运行指针退出函数范围后,指针将被删除,而不是QPropertyAnimation对象。
但是如果你不删除它,它就会成为记忆中的僵尸。
最好的方法是为QPropertyAnimation指针使用一个类变量。因此,您可以删除指针中的对象后,程序关闭或任何时候,你想。
希望能帮上忙..。因为我糟糕的英语。
发布于 2013-10-31 16:51:27
解决这个问题的一个更好的方法是调用start()方法,如下所示:
animation->start(QAbstractAnimation::DeleteWhenStopped);https://stackoverflow.com/questions/9246548
复制相似问题