我是Qt新手,我對如何刪除小部件感到困惑。我正在閱讀視頻,並且在視頻幀正在讀取時我想顯示一個QProgressbar,然後在視頻加載時刪除此QProgressbar。刪除指向小部件的指針Qt C++
我有兩種不同的方式做到了:
使用指針
QWidget* wd = new QWidget(); QProgressBar* pB = new QProgressBar(wd); QLabel* label = new QLabel(wd); //setting geometry and updating the label and progressbar wd->deleteLater(); wd->hide();
這個代碼寫一個類內部,我是假設,當這個類的析構函數被調用時,小部件將被刪除與所有的孩子,但沒有發生,每次我再次運行此功能一個新的小部件創建而不隱藏或刪除前一個(注:我試圖從小部件中刪除標籤和進度條假設他們會從內心消失E中的組件,但是這並沒有發生「刪除(PB);」)
使用對象
QWidget wd; QProgressBar pB(&wd); QLabel label(wd); //setting geometry and updating the label and progressbar wd.deleteLater(); wd.hide();
當我運行相同的代碼,但使用的替代對象的指針,它有按照我的意願運行,每次運行該功能時,舊的小部件都將被銷燬,並創建一個新的小部件。
注意: - 同樣當我關閉主窗口,在指針的情況下,小部件WD仍然存在,程序不會終止,直到我手動關閉他們 - 在對象的情況下,當我關閉主窗口一切都關閉,程序正確終止。
如果我有指針到小部件的載體刪除矢量內所有的指針沒有任何內存泄漏
我推薦閱讀[一本書](http://stackoverflow.com/a/388282/3484570)關於內存管理如何在C++中工作。然後閱讀[Qt如何以不同的方式](http://doc.qt.io/qt-5/objecttrees.html)。 – nwp
您可以簡單地將其隱藏,而不是刪除'QProgressBar'。無論如何,你可能需要它來爲下一個流。 – maxik