2012-02-12 52 views
1

下面的代碼不會創建動畫......但是如果QPropertyAnimation是一個新實例,那麼它可以......爲什麼?有什麼不同 ?謝謝...直接關於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

它啓動後,QProperyAnimation將建立​​自己獨立的定時器和你的主線程之外運行。

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

它將在運行指針退出你的函數作用域後被銷燬。

否則,如果u使用

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

您將創建工作存儲器中的一個動畫對象,並通過AMT指針的尖頭。 指針將在運行指針退出函數作用域後被刪除,而不是QPropertyAnimation對象。

但如果你不刪除它,它將成爲存儲器中的殭屍。

最好的辦法是,對QPropertyAnimation指針使用一個類變量。所以你可以在程序關閉或者想要的時候刪除指針中的對象。

我希望它有幫助.. 我的英語不好。

+0

首先,感謝您幫助me..According您的意思,它會創建一個線程? – 2012-02-12 07:14:51

+0

歡迎Tu_JianWu ..是的..它會像QTimer一樣從你的QObject創建一個新的子線程。 – syerwin 2012-02-12 07:38:05

+0

哦,我明白了。這是很久以前讓我困惑的原因。 – 2012-02-12 08:33:39

0

一個更好的辦法來解決這個沒有內存泄漏是調用start()方法是這樣的:

animation->start(QAbstractAnimation::DeleteWhenStopped);