當我按下鍵時,應該有一個查詢引擎。通過添加項目並設置小部件,將結果放入QListWidget
。不知何故,這會導致大量內存溢出,甚至導致我的機器崩潰。但我沒有得到錯誤。 clear()
不會刪除傳遞給QListWidget
的項目和setItemWidget()
設置的小部件。我甚至試圖自己刪除它們(評論),但仍然存在內存泄漏。這個錯誤出現在if (!results.empty())
-block中,我想,因爲註釋掉了內存泄漏。Memoryleak with QListWidget addItem()+ setItemWidget()
void Widget::onTextEdited(const QString & text)
{
// QListWidgetItem * takenItem;
// while (takenItem = _results->takeItem(0)){
// delete _results->itemWidget(takenItem);
// delete takenItem;
// }
_results->clear(); _results->hide();
if (!text.isEmpty())
{
const std::vector<const Items::AbstractItem *> results = _engine.request(text);
if (!results.empty())
{
for (auto i : results){
QListWidgetItem *lwi = new QListWidgetItem;
_results->addItem(lwi);
ListItemWidget *w = new ListItemWidget;
w->setName(i->name());
w->setTooltip(i->path());
_results->setItemWidget(lwi, w);
}
_results->setFixedHeight(std::min(5,_results->count()) * 48); // TODO
_results->show();
}
}
this->adjustSize();
}
我剛剛試了一下。內存泄漏仍然存在。 Valgrind告訴我沒有錯誤。 – ManuelSchneid3r 2014-08-28 10:58:02
@ ManuelSchneid3r,如何評論QLabel和setItemWidget部分,只留下前兩行(新的QListWidgetItem和addItem)。有什麼事情告訴你存在內存泄漏?該程序崩潰? – fxam 2014-08-29 02:04:57
發現它:clear()不會刪除小部件。它只是刪除小部件。感謝您的幫助, – ManuelSchneid3r 2014-09-01 22:21:44