Qt中QTableWidget的堆使用情况

Heap usage in QTableWidget in Qt

本文关键字:用情 情况 QTableWidget Qt      更新时间:2023-10-16

我试图强调我的程序,它基本上用不同行数的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();
}

你确定这就是你泄漏的地方吗?

相关文章: