Qt的内存管理基本上是不需要操心的。之前总感觉类似QTableWidget的控件操作很不方便,没有类似ios的cell复用,应该也是可以自己实现的,今天谈谈QtableWidget的释放问题。
一直担心QTableWidget使用不好会造成内存泄漏,所以就研究了一下。
创建的过程都一样
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
QPushButton *btn = new QPushButton();
btn->setText(QString("%1").arg(i));
ui->tableWidget->setCellWidget(i, j, btn);
list.append(btn);
}
}
表格初始占用内存大概7~8M;创建1000行,5列占用21M左右。
两个按钮,反复创建和清空
第一种清空方式:
int num = ui->tableWidget->rowCount();
for(int i = 0; i < num; i++)
{
ui->tableWidget->removeRow(0);
}
ui->tableWidget->clear();
第一种清空方式,经过反复验证,内存下降到13M左右,且不会崩溃。
第二种方式:
记录控件的指针
if(list.size())
{
for(int i = 0; i < list.size(); i++)
{
delete list.at(i);
}
list.clear();
}
这种并没有什么效果,内存没有什么变化,始终在21M左右,可能引发崩溃。
第三种方式:
ui->tableWidget->clear();
第四种方式
ui->tableWidget->clearContents();
三、四两种方式的效果最好,内存下降到11M左右。