QtableView 移除行的一些问题

tt2com 2011-11-02 03:38:20
我用 removeRow()函数来移除我选中的行,我有个疑问是
QtableView中的每个空格中的 QStandardItem 是我new出来的

我仅仅用removeRow() 但我没有调用delete

是否会造成内存泄露 如果不能及时的是否内存,那么我该如果实现删除选中行时及时的释放内存。
...全文
583 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhy282289 2011-11-03
  • 打赏
  • 举报
回复
"在内存管理器上面是可以看到内存增长和减小的。那么为什么我程序中只能看到内存增大不能看到减小?"
后面那句是什么意思
tt2com 2011-11-03
  • 打赏
  • 举报
回复
我开辟一个超大的QStandardItem[] 数据块
然后delete
在内存管理器上面是可以看到内存增长和减小的。那么为什么我程序中只能看到内存增大不能看到减小?
wopabe 2011-11-03
  • 打赏
  • 举报
回复
楼上说的对
tt2com 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhy282289 的回复:]

你这删除肯定是要自己删除的~
vec = takeRow();
qDeleteAll(vec);
看内存管理器可是是你删的不够多吧
打下断点看下就行了,没必要看内存管理器
[/Quote]
我是用delete 一个一个删除的 看断点是free的状态
zhy282289 2011-11-03
  • 打赏
  • 举报
回复
你这删除肯定是要自己删除的~
vec = takeRow();
qDeleteAll(vec);
看内存管理器可是是你删的不够多吧
打下断点看下就行了,没必要看内存管理器
tt2com 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhy282289 的回复:]

"在内存管理器上面是可以看到内存增长和减小的。那么为什么我程序中只能看到内存增大不能看到减小?"
后面那句是什么意思
[/Quote]
不断进行新建QStandardItem 插入到tableview中 在移除delete掉,这样操作看任务管理器,只能看到的内存不断加大不会变小。
但我测试开辟一个非常大的QStandardItem的数组 在delete 可以看到内存先大后小。
我的测试代码

void demo_tableview::on_pushButton_2_clicked()
{
QString str = QString("%0,%1").arg(5).arg(6);
QList<QStandardItem *> ii;

ii.push_back(new QStandardItem(str));
ii.push_back(new QStandardItem(str));
QStandardItemModel *t1 =(QStandardItemModel *)ui.tableView->model();
t1->insertRow(ui.tableView->model()->rowCount(),ii);
i99 = new QStandardItem[1000000]();
}


void demo_tableview::on_pushButton_clicked()
{
QModelIndexList indexList = ui.tableView->selectionModel()->selectedRows();
QList<QStandardItem *> ii;
QStandardItemModel *t1 =(QStandardItemModel *)ui.tableView->model();
for (int i = indexList.size()-1; i >= 0; --i)
{
ii=t1->takeRow(indexList [i].row());
QStandardItem * c=ii[0];
delete []c;
c=ii[1];
delete []c;

}
delete []i99;

}
tt2com 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 weiweiqiao 的回复:]
引用 3 楼 tt2com 的回复:

引用 1 楼 inhibitory 的回复:
记得是没有内存泄漏。
最简单的就是自己写一个Item的类,在析构函数里输出点东西,看看removeRow的时候有没有调用析构函数。

我主要是比较懒想直接得到答案,呵呵。

应该没有泄露,qt自带工具会记录对象的状态,如果删除,qt自己会delete的。
[/Quote]
我不能让QT自己删,我需要确保不用的时候,那块内存被即时的释放掉。
我郁闷的我用
takeRow() 导出要删除的列表进行手动delete

当我再内存管理器上面还是只看到了内存的增长,并没用因为向下降。我debug下看QList<QStandardItem *> 内部均是free的。
释放用内存管理器看内存消耗不合理?
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tt2com 的回复:]

引用 1 楼 inhibitory 的回复:
记得是没有内存泄漏。
最简单的就是自己写一个Item的类,在析构函数里输出点东西,看看removeRow的时候有没有调用析构函数。

我主要是比较懒想直接得到答案,呵呵。
[/Quote]
应该没有泄露,qt自带工具会记录对象的状态,如果删除,qt自己会delete的。
tt2com 2011-11-02
  • 打赏
  • 举报
回复
我用简单的任务管理器看我不断的插入和移除,看内存就看到增长,没有降过。是否意味着没有释放?
tt2com 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 inhibitory 的回复:]
记得是没有内存泄漏。
最简单的就是自己写一个Item的类,在析构函数里输出点东西,看看removeRow的时候有没有调用析构函数。
[/Quote]
我主要是比较懒想直接得到答案,呵呵。
就这样好了 2011-11-02
  • 打赏
  • 举报
回复
可以直接delete的.
Inhibitory 2011-11-02
  • 打赏
  • 举报
回复
记得是没有内存泄漏。
最简单的就是自己写一个Item的类,在析构函数里输出点东西,看看removeRow的时候有没有调用析构函数。

16,200

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧