`
ydbc
  • 浏览: 778402 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

关于QTableWidget的item所占内存的释放问题

 
阅读更多

关于QTableWidget中的数量众多的item所占内存比较多,用完要释放的问题。

现在有两个问题:

1 是什么时候释放?

2 如何释放

我们先看第一个问题,因为我现在的程序里面是定期刷新table,每次加载大量的数据,所以如果不清除之前的内存,就会使内存一直申请得不到释放最终导致内存泄露。当次显示完就释放显然不合适,因为item被delete掉后表中的内容就也不见了,因为指向的内存块区域的值给清除了。那么我们很容易想到,应该在下次刷新时清除上次申请的内存。

2 如何释放

之前在QT中文论坛上,搜索以前的记录看到有人问过,QTableWidget的clearContents是否可以清除QTableWidgetItem所申请的内存,有人回答可以。但是否可以,没测过,我对此也表怀疑。今天我实际测了一下,证明确实是可以释放的。下面贴下我的测试过程:

思路:启动一个简单GUI程序,此时开任务管理器看内存占用。然后点击一个按钮后,生成一些item,并添加到table中,此时再看内存占用。再点击另一个按钮,调用clearContentes,看增加的内存是否被释放掉。

代码:

void TestClearContents::on_pushButton_clicked()

{

ui.tableWidget->setRowCount(100);

ui.tableWidget->setColumnCount(500);

for (int i = 0;i < 100;i++)

{

for (int j = 0;j < 500;j++)

{

QTableWidgetItem *item = new QTableWidgetItem("aaa");

ui.tableWidget->setItem(i,j,item);

}

}

}

void TestClearContents::on_pushButton_2_clicked()

{

ui.tableWidget->clearContents();

}

结果:初始运行时 点击第一个按钮后 点击释放按钮后

14208 28248 14208

14208 28248 14212

14212 28248 14212

另外,释放内存时,如果用

int row = ui.tableWidget->rowCount();

int column = ui.tableWidget->columnCount();

for (int i = 0;i < row;i++)

{

for (int j = 0;j < column;j++)

{

QTableWidgetItem *item = ui.tableWidget->item(i,j);

if (item)

{

delete item;

}

}

}

这样的方法也可以把内存释放掉,但这个比较慢,是一段一段的释放内存,显然不适合实

分享到:
评论

相关推荐

    QTableWidget实现大数据分页快速显示.zip

    这减少了内存开销,因为QTableWidgetItem是一个轻量级对象,但数量过多仍可能导致内存压力。 2. **数据更新策略**: 当需要切换页面或加载新数据时,先清空现有的QTableWidget中的所有item内容。这一步通过迭代表格...

    QTableWidget数据拖动

    在Qt编程中,`QTableWidget` 是一个非常常用的组件,用于展示二维表格数据。...不过,需要注意的是,拖放操作可能会引发性能问题,特别是在大数据量时,因此在实现时要考虑优化,避免不必要的计算和内存占用。

    QT-导出QTableWidget表的信息并格式对齐

    在QT中,QTableWidget可以通过添加 QTableWidgetItem 对象来填充单元格。每个单元格都有自己的行和列索引,这使得我们可以轻松地访问和修改它们的内容。为了导出表格数据,我们通常会遍历所有的单元格,获取它们的...

    QT 高效 导入导出excel , tableWidget显示

    - 将读取的数据填充到`QTableWidgetItem`对象中,然后插入到对应的单元格。`tableWidget-&gt;setItem(row, column, new QTableWidgetItem(item_data));` - 更新`QTableWidget`的显示,如:`tableWidget-&gt;...

    QT tablewidget样式与添加按钮进度条选择框.7z

    更进一步,如果你想要定制单元格的个体样式,可以使用`QTableWidgetItem`的`setFlags`方法来控制可选中、可编辑等属性,或者使用`setData`来设置自定义数据。 接下来,我们关注如何在TableWidget中添加控件。Qt允许...

Global site tag (gtag.js) - Google Analytics