Qt QListWidget通过clear()和takeItem(int row)清除列表项
1、QListWidget的clear()
clear()用来清理所有的QListWidgetItem项,释放所有项的QListWidgetItem对象内存。
这就意味着,如果希望使用clear()接口来清理QListWidget,那么在使用addItem(QListWidgetItem *aitem)往列表中添加项时,必须采用new QListWidgetItem的方式来申请aitem的内存:
QListWidgetItem *aitem = new QListWidgetItem();
addItem(aitem);
以避免在执行clear()会出现释放QListWidgetItem对象内存失败。
2、QListWidget的takeItem(int row)
takeItem(int row)只清理第row项,不释放第row项的QListWidgetItem对象内存。
如果你喜欢使用takeItem(int row)来清理列表项,那么在使用addItem(QListWidgetItem *aitem)往列表中添加项时,可以采用两种方式:
(1) 用成员变量的存储QListWidgetItem对象
QListWidgetItem m_aitem;
然后
addItem(&m_aitem);
清理列表项时,就不需要delete item了:
for (int i = 0; i < this->count(); ++i)
{
QListWidgetItem *item = this->takeItem(0);
}
(2) 是使用new QListWidgetItem的方式
QListWidgetItem *aitem = new QListWidgetItem();
addItem(aitem);
清理列表项时,就需要delete item了:
for (int i = 0; i < this->count(); ++i)
{
QListWidgetItem *item = this->takeItem(0);
if(item)
delete item; item = nullptr;
}