2014-02-09 98 views
1

我有一個簡單的場景,添加了一個QGraphicsProxyWidget(以及一些設置它的小部件)。QGraphicsProxyWidget從場景中刪除後崩潰

,如果我嘗試從現場移除它,就像這樣:

if (widget) 
{ 
parentScene->removeItem(m_widget); // m_widget is a QGraphicsProxyWidget 
delete m_widget; // I also tried m_widget->deleteLater() here - same result 
m_widget = NULL; 
} 

我得到一個瞬間崩潰 - 沒有描述調用堆棧,儘管這會告訴我什麼是錯的(相關的調用堆棧調用一些窗口,而這全部)。

我使用Qt庫的版本5.1.1,我已經搜查手冊和網絡的一個指令如何真正消除這樣的小工具,它不是在所有記錄在案,所以我不知道如果我在那裏做錯了什麼,或者在圖書館裏有錯誤。

我很感激任何幫助。

乾杯,

彼得

+1

這是一個拼寫錯誤(在'if語句中'部件與'm_widget'),還是這是你的實際代碼?如果是後者,這可能是你的問題! –

+0

是的,對不起,這是一個錯字 –

回答

0

我發現這個問題 - 看起來不相關的調用'prepareGeometryChange'是在這裏責怪。 我的小工具正在改變大小(我沒有提到它,因爲它當時似乎不相關)。不過,在我按照手冊指示進行幾何變更之前,之前沒有調用上述方法。

顯然,這種方法是爲了保持現場的內部數據,以便非常重要,因爲我錯誤地調用它,它留給刪除的項目一些無效引用。

0

檢查if聲明:它說widget當你可能是指m_widget。如果widget非空且m_widget爲空,則您的程序將崩潰,因爲對removeItem/delete的調用將嘗試引用空指針。