【发布时间】:2014-08-27 22:17:24
【问题描述】:
当我按下一个键时,将会有一个对引擎的查询。通过添加一个项目并设置小部件,结果将被放入QListWidget。不知何故,这会导致大量内存溢出,甚至使我的机器崩溃。但我没有得到错误。 clear() 不会删除传递给QListWidget 的项目和setItemWidget() 设置的小部件。我什至试图自己删除它们(评论),但仍然有内存泄漏。我猜错误在if (!results.empty())-block 中,因为注释掉它会堵塞内存泄漏。
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();
}
【问题讨论】:
标签: c++ qt memory-leaks qt5