我有一個Qt應用程序,它使用QPointers調出新的UI對話框(Widgets)。主應用程序可以有許多與不同數據加載的相同小部件。我遇到的問題是刪除並釋放每個小部件的內存。如果我監視程序的RAM使用情況,每次單擊按鈕打開其中一個新窗口小部件時,它會增加內存,並且當我關閉窗口小部件時,它似乎沒有釋放內存。我試過使用deleteLater
和其他解決方案,但不斷在程序中崩潰。QPointer和刪除對象
一些示例代碼是在這裏:
QPointer<ListReservations> listResWindow = new ListReservations(resID);
listResWindow->setNum(numpeople);
listResWindow->show();
這將調用「ListReservations」爲QDialog
(非模態),這是宣佈部件。在那個對話框中,我有一個按鈕來關閉調用QWidget::close()
插槽的窗口。
我想這個問題是怎麼做我的主程序(具有QPointer
)知道什麼時候,關閉對話框,然後釋放對話框,(如果可能)刪除指針,以節省更多的內存...
我以爲你可能能夠對QPointer
對象做一個QConnect()
,但我似乎無法找到任何允許傳遞指針的信號或插槽,更不用說在對話框確實關閉並準備就緒後發送信號刪除。
也許我需要某種功能的主程序,需要一個通用指針對象,然後有QDialog的調用之前調用它自己的親密插槽?在那個函數中,它會自動被銷燬?僅僅拋出,我試過實現,但在失敗的想法....
我不認爲我可以在其他地方重複使用相同的指針,因爲從理論上講,你可以有多個ListReservations窗口同時開啓。
你關閉時刪除的第一條建議就是點亮。但是,當指向的對象被刪除時,QPointer對象將被自動設置爲NULL,所以不需要onDialogClosed插槽(我可以看到)。 – 2010-03-03 17:28:41
我以前從未使用過'QPointer',並假設它沒有這種行爲,謝謝你的信息。我會更新答案。 – 2010-03-03 17:35:27
我還應該補充一點,在將QPointer用於不同線程所擁有的對象時,存在潛在的競爭條件。在這種情況下,可以在QPointer對象未被設置爲0的情況下刪除對象。 – 2010-03-04 19:15:52