• 4325阅读
  • 1回复

[提问]关于 QTableWidgetItem NEW出来的内存 [复制链接]

上一主题 下一主题
离线cxs05741018
 

只看楼主 倒序阅读 楼主  发表于: 2013-09-01
  QTableWidgetItem *item = new QTableWidgetItem(QString("dd"));
setItem(0,0,item);
这样如果一直setltem NEW 出来的 内存也越来越多 ,如果清空ITEM , clearContents() 后 所有的ITEM  内存释放了吗  或者RemoveRow 一行的话那么这行的ITEM 内存释放了吗
离线bingyifeng

只看该作者 1楼 发表于: 2013-09-01
调试了下,是删除了的,详细见下面的红色部分。
不过,LZ,建议你自己编译一个可以调试的Qt
这样类似的问题打一个断点就可以确认了。

void QTableModel::clearContents()
{
    beginResetModel();
    for (int i = 0; i < tableItems.count(); ++i) {
        if (tableItems.at(i)) {
            tableItems.at(i)->view = 0;
            delete tableItems.at(i);
            tableItems = 0;

        }
    }
    endResetModel();
}


bool QTableModel::removeRows(int row, int count, const QModelIndex &)
{
    if (count < 1 || row < 0 || row + count > verticalHeaderItems.count())
        return false;

    beginRemoveRows(QModelIndex(), row, row + count - 1);
    int i = tableIndex(row, 0);
    int n = count * columnCount();
    QTableWidgetItem *oldItem = 0;
    for (int j = i; j < n + i; ++j) {
        oldItem = tableItems.at(j);
        if (oldItem)
            oldItem->view = 0;
        delete oldItem;
    }
    tableItems.remove(qMax(i, 0), n);
    for (int v = row; v < row + count; ++v) {
        oldItem = verticalHeaderItems.at(v);
        if (oldItem)
            oldItem->view = 0;
        delete oldItem;
    }
    verticalHeaderItems.remove(row, count);
    endRemoveRows();
    return true;
}
<span style="color:blue ">淘宝,绿石斋</span> <a href="http://shop33295817.taobao.com“> <span style="color:blue ">各种水晶饰品,手链,项链 </span></a>
快速回复
限100 字节
 
上一个 下一个