• 11475阅读
  • 4回复

关于 QTableWidgetItem 资源释放问题。。。 [复制链接]

上一主题 下一主题
离线icelee
 
只看楼主 倒序阅读 楼主  发表于: 2009-02-13
— 本帖被 XChinux 执行加亮操作(2009-02-16) —
关键词: 资源释放
QTableWidget *tableWidget_his = new QTableWidget(this);
typedef QList<HIS_INFO> HList;

void ShowHisInfo(const HList &listInfo )
{
    tableWidget_his->clearContents();
    if(listInfo.empty()) return;
    for( int j = 0; j < listInfo.count();j++)
    {
        tableWidget_his->setItem(j,0, new QTableWidgetItem(QObject::tr(listInfo.at(j).item0)));
        tableWidget_his->setItem(j,1, new QTableWidgetItem(QObject::tr(listInfo.at(j).item1)));
        tableWidget_his->setItem(j,2, new QTableWidgetItem(QObject::tr(listInfo.at(j).item2)));
        tableWidget_his->setItem(j,3, new QTableWidgetItem(QObject::tr(listInfo.at(j).item3)));
        tableWidget_his->setItem(j,4, new QTableWidgetItem(QObject::tr(listInfo.at(j).item4)));
        tableWidget_his->setItem(j,5, new QTableWidgetItem(QObject::tr(listInfo.at(j).item5)));
        tableWidget_his->setItem(j,6, new QTableWidgetItem(QObject::tr(listInfo.at(j).item6)));
    }
}

这样的QTableWidgetItem通过tableWidget_his->clearContents();可以释放么?

程序中要是插入数据频率过快的话会导致程序内存占用率变大(由原本的12M变至100M不等。。。)

QTableWidget行列是固定的6行7列的,我不想用removeRow在insertRow来实现。。。
程序人生
离线landuochong
只看该作者 1楼 发表于: 2009-02-13
可以,用QTableWidgetItem.settext()也可以阿
离线icelee
只看该作者 2楼 发表于: 2009-02-13
我用的是QT4控件,你那个setText是QT3下的东西,虽然QT4也有支持QT3的,但是就我的问题,怎么造成的呢?那个new 出来的QTableWidgetItem需要释放么?
关键是我程序内存占用率变大。。。。。是堆栈没释放造成的
程序人生
离线weizhy
只看该作者 3楼 发表于: 2009-02-13
1.高速更新慢的问题:
如果使用item方式的话,高速更新会比较慢,你可以使用QTableView+QStandardItemModel的模式,更新非常快,同时占系统资源极少!
本来嘛,数据更新就应该使用mvc模式,qt中提供的item形式的控件只是为了在低速时提供编码的便捷而已,小东西用他开发快,大的东西还是用qt的model-view组合

2.内存泄露问题
如果使用item型,则可以使用如下代码释放资源
delete tableWidget_his->takeItem(i, j);
不过要注意两点:
(1)已经删除了item,但是table还保留着该位置(i,j),此时再使用item(i,j)会返回无效指针,同理,此时对(i,j)位置做的数据更新会引发异常
(2)当你删除了整行的item后,要记得删除row,使用removeRow
离线icelee
只看该作者 4楼 发表于: 2009-02-16
楼上的说明真详细,谢谢,我来看看QStandardItemModel。。
程序人生
快速回复
限100 字节
 
上一个 下一个