Qt中QTableWidget的堆使用情况
Heap usage in QTableWidget in Qt
我试图强调我的程序,它基本上用不同行数的QTableWidget 更新
每次我做一些操作时,我都想修改表的大小,但在它之前,如果想清除它及其单元格内容。
我所经历的是,从我的资源监视器监视到的堆只会增加。
这是我按下应用程序中的按钮时运行的代码部分:
MyClass::updateTable(int nrows)
{
ui->tableWidget->clearContents(); // this is to free the memory but the heap always grows
for (int i=0; i<nrows; i++)
{
// I don't like this new I don't know when the destructor is called here!!
QTableWidgetItem *item = new QTableWidgetItem();
item->setText("SOMETEXT");
ui->tableWidget->setItem(i,0,idItem);
}
}
从CCD_ 1指定的行数是一个非常可变的数(从10到10^5)。
如何从堆中完全清除内存?
那个新的是必要的。奇怪的是clearContents()应该去掉它们。您可以使用的另一个函数是clear()函数,但这两个函数之间的唯一区别是clear将首先删除标头,然后调用clearContents(),后者将实际删除项。
事实上,看看这些函数的代码:
void QTableModel::clear()
{
for (int j = 0; j < verticalHeaderItems.count(); ++j) {
if (verticalHeaderItems.at(j)) {
verticalHeaderItems.at(j)->view = 0;
delete verticalHeaderItems.at(j);
verticalHeaderItems[j] = 0;
}
}
for (int k = 0; k < horizontalHeaderItems.count(); ++k) {
if (horizontalHeaderItems.at(k)) {
horizontalHeaderItems.at(k)->view = 0;
delete horizontalHeaderItems.at(k);
horizontalHeaderItems[k] = 0;
}
}
clearContents();
}
void QTableModel::clearContents()
{
for (int i = 0; i < tableItems.count(); ++i) {
if (tableItems.at(i)) {
tableItems.at(i)->view = 0;
delete tableItems.at(i); //Your item should get deleted here
tableItems[i] = 0;
}
}
reset();
}
你确定这就是你泄漏的地方吗?
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 在集合的情况下使用emplace_hint的用例是什么?
- 在没有堆的情况下用两种方法构造对象
- 如何在不中断的情况下正确使用C++中的切换用例语句中的Fallthrough
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 在这种情况下,有没有办法用单个解决方案替换两个仅在类型上不同的相似函数?
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- 不能在没有对象的情况下调用成员函数,但我用对象调用函数
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 无法在前面有多余空格的情况下获取要打印的数组.只有第一个值会用空格打印
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- 如何在没有任何JavaScript知识的情况下用PNaCl编写C++HTML5应用程序
- 如何在不使用开关大小写的情况下用C++编写菜单驱动的程序
- 在什么情况下,运算符=应该用左值/右值重载而不是复制和交换来实现
- 在没有测试用例的情况下提升单元测试框架
- 在这种情况下,为函数赋值有什么用
- 如何在没有_setmode的情况下用C++输出unicode
- 如何在没有STL的情况下用c++中的Key创建和访问内存块
- 如何在不锁定文件的情况下用C++编写文件
- clang与gcc运行时的区别:用clang构建的c++类模板在没有复制构造函数的情况下崩溃,用复制构造函数构建的gcc