QT内存问题

gongzf111 2017-11-13 05:02:40
for(int j = 0; j < 28; j++)
{
QTableWidgetItem * item = new QTableWidgetItem(tr("%1").arg(data[page*records_page+i][j+0]));
ui->history_table->setItem(i,j,item);
}
以上代码频繁调用 会造成该内存泄漏么?new了很多 没有delete释放。。。
如果有 该怎么解决!!?
...全文
479 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不是设置界面显示一部分吗?比如100个。弄个按钮。翻页的时候。显示下面100个啊。几万个都一次显示?没必要。
走好每一步 2017-11-15
  • 打赏
  • 举报
回复
可以考虑用QTableView,这个可以SetModel。
张小飞Official 2017-11-15
  • 打赏
  • 举报
回复
引用 10 楼 u013914992 的回复:
[quote=引用 8 楼 u010370871 的回复:] 不会,只要是集成QObject的,都会被父类自动管理回收,可看下QObject的虚析构函数实现
QObject不是超级类么 所有的都直接或者间接的继承它[/quote] 所以才不用你管理啊
走好每一步 2017-11-15
  • 打赏
  • 举报
回复
QTableWidgetItem * item(int row, int column) const QTableWidgetItem * itemAt(const QPoint &point) const
走好每一步 2017-11-15
  • 打赏
  • 举报
回复
楼主,我也是醉了。 外面还有循环。。。 你tableWidget该不会是插入一项,你就new一项吧。 其实只需要new出显示的数量的item就可以了,翻页的时候,item复用
  • 打赏
  • 举报
回复
new时候赋给一个对应指针,程序退出或者在使用完的地方delete掉,就可以做到成对出现
gongzf111 2017-11-15
  • 打赏
  • 举报
回复
引用 3 楼 qq_20553613 的回复:
Qt new内存自动回收规则: 1、必须是QObject的子类; 2、指定父类对象,即是父类释放时自动释放子类; 好的习惯就是new和delete成对出现,确保万无一失!
如楼上的两个例子 不能成对出现 要是delete 数据就没有显示了
gongzf111 2017-11-15
  • 打赏
  • 举报
回复
引用 8 楼 u010370871 的回复:
不会,只要是集成QObject的,都会被父类自动管理回收,可看下QObject的虚析构函数实现
QObject不是超级类么 所有的都直接或者间接的继承它
gongzf111 2017-11-15
  • 打赏
  • 举报
回复
引用 7 楼 qqwangfan 的回复:
[quote=引用 6 楼 u013914992 的回复:] [quote=引用 5 楼 qqwangfan 的回复:] new时候赋给一个对应指针,程序退出或者在使用完的地方delete掉,就可以做到成对出现
我上面的两个例子中都不可以delete,delete之后就不显示了。。[/quote] 如果从头到尾只是new28个,中间不会不断添加,这个是你程序需要开的内存,也是必须的,可以放到程序结束才释放这部分内存。 如果会在程序中不断的new,new完后不用的时候又不释放的话就会内存泄漏,但是你new出来的都是必须要用到的,没办法释放,那也只能留着,不过这样你的程序所占用的内存就会越来越多,你必须要想到内存一直不断消耗的话会耗尽系统内存然后程序就会挂掉。[/quote] 一次不止28个 外面还有一个for循环 查询一次有可能几万个 因为是把数据库的数据查出来再显示到表格的。。 已经奔溃了 所有来找大神帮忙看看有啥好的解决方法没!
张小飞Official 2017-11-15
  • 打赏
  • 举报
回复
不会,只要是集成QObject的,都会被父类自动管理回收,可看下QObject的虚析构函数实现
  • 打赏
  • 举报
回复
引用 6 楼 u013914992 的回复:
[quote=引用 5 楼 qqwangfan 的回复:] new时候赋给一个对应指针,程序退出或者在使用完的地方delete掉,就可以做到成对出现
我上面的两个例子中都不可以delete,delete之后就不显示了。。[/quote] 如果从头到尾只是new28个,中间不会不断添加,这个是你程序需要开的内存,也是必须的,可以放到程序结束才释放这部分内存。 如果会在程序中不断的new,new完后不用的时候又不释放的话就会内存泄漏,但是你new出来的都是必须要用到的,没办法释放,那也只能留着,不过这样你的程序所占用的内存就会越来越多,你必须要想到内存一直不断消耗的话会耗尽系统内存然后程序就会挂掉。
gongzf111 2017-11-15
  • 打赏
  • 举报
回复
引用 5 楼 qqwangfan 的回复:
new时候赋给一个对应指针,程序退出或者在使用完的地方delete掉,就可以做到成对出现
我上面的两个例子中都不可以delete,delete之后就不显示了。。
gongzf111 2017-11-14
  • 打赏
  • 举报
回复
引用 1 楼 dext 的回复:
不会,这个被QTableWidget自动管理了。
是QTableWidget内部机制么?! 那下面的代码 class TimeScaleDraw: public QwtScaleDraw//定义一个新类去继承QwtScaleDraw,重新实现方法 { public: TimeScaleDraw( const QTime &base ): baseTime( base ) {}//baseTime,成员初始化QTime类型的base virtual QwtText label( double v ) const//重新实现里面的虚方法,此方法含义,将v值转换为代表标签label { QTime upTime = baseTime.addSecs((int)v);//强制将double类型的v转化为int类型,其实v就是坐标,当前时间加上坐标 return upTime.toString("hh:mm"); //返回一个String类型 } private: QTime baseTime; //在构造函数进行初始化 }; 定时器槽函数2S调用以下代码 ui->qwtPlot->setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDraw(m_baseTime) ); 那这个方法类似于QTableWidget那样,qwt内部也有管理机制么?!有点疑惑
Acuity. 2017-11-14
  • 打赏
  • 举报
回复
Qt new内存自动回收规则: 1、必须是QObject的子类; 2、指定父类对象,即是父类释放时自动释放子类; 好的习惯就是new和delete成对出现,确保万无一失!
dext 2017-11-13
  • 打赏
  • 举报
回复
不会,这个被QTableWidget自动管理了。
经常使用电脑可能也遇到过了! 突然‘咚’的一声 提示 内存不能为read 这个问题我以前也遇到过不知道怎么解决 现在终于有办法了!呵呵! 我们就看看是什么原因引起的吧,另外附送一个小工具修复见下面附件 总结下大概以下9个原因 1、驱动不稳定,与系统不兼容,这最容易出现内存不能为 Read 或者文件保护(主要原因) 2、系统安装了一个或者多个流氓软件,这出现 IE 或者系统崩溃的机会也比较大,也有可能出现文件保护 3、系统加载的程序或者系统正在运行的程序之前有冲突,尤其是部分杀毒软件监控程序 4、系统本身存在漏洞,导致容易受到网络攻击。 5、病毒问题也是主要导致内存不能为 Read、文件保护、Explorer.exe 错误…… 6、如果在玩游戏时候出现内存不能为 Read,则很大可能是显卡驱动不适合(这里的不适合有不适合该游戏、不适合电脑的显卡)也有可能是 系统版本不够新或者不符合该游戏、显卡驱动 7、部分软件本身自身不足的问题 8、电脑硬件过热,也是导致内存不能为 Read 的原因之一。 9、电脑内存与主板兼容性不好也是导致内存不能为 Read 的致命原因! 以上大概就是目前可以引起系统提示 内存不能为read的原因了 另外软件是针对只是针对部分原因引起的内存不为read所做修复,不是100%有效,大家可以试试看 说下原理: 就是批处理使用 regsvr32命令 将动态链接库文件重新注册 (system32下的所有 .dll 和 .ocx 文件;) 注意:由于修复工具会重新注册 system32下的所有 .dll 和 .ocx 文件 此操作对杀毒软件来说属于敏感操作,所以建议使用修复工具的时候,请禁用杀毒软件,以免部分杀毒误报!jie
2022年11月4日-2022年11月14日购买当前课程赠送课程学习地址如下:https://edu.csdn.net/course/detail/32434https://edu.csdn.net/course/detail/35658https://edu.csdn.net/course/detail/30223https://edu.csdn.net/course/detail/32408https://edu.csdn.net/course/detail/32429注:因赠送课程不会出现在已订阅课程列表中,以下课程学习地址一定要收藏保存。#课程服务 在线答疑:本课程设有专门的讨论留言区,学习中遇到任何问题,直接给老师留言即可,老师都会及时进行回复。远程协助:如果遇到复杂问题,老师还可进行远程协助,这个一般可不是一两百元的课程就能享受到的。源码分享:为了让大家更好的进行项目实战,老师还将课程中涉及到的所有源码分享给学员,按照视频中的提示进行下载即可。在CSDN分享C++ Qt开发知识已经有6年了,感谢众多博友对我的支持,了解到很多人对Qt的使用还是有些困扰,例如Qt环境搭建,Qt布局的使用,如何使用Qt编写复杂的界面,如何自定义非标控件,Qt如何和Web交互,Qt和后台接口如何交互等;经过这几年的整理,我决定出这套《Qt高级开发视频教程》,带领大家学习Qt高级开发知识,学习如何使用Qt开发企业级别的项目;通过本课程的学习,大家将会达到企业招聘的中高级要求。为了照顾零基础学员,本课程第一章会介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。即使没有Qt开发的学习经验,也能跟着课程顺利学习。课程核心知识点地图如下: 课程每章核心知识点介绍如下: 第一章:介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。第二章:了解到很多学员对于Qt界面布局很不熟悉,将会详细介绍Qt设计器布局,以及如何C++代码手写布局,从常见的企业级项目入手,带领大家学会各种布局的实现,例如WPS、腾讯会议、优酷、迅雷等界面的实现;界面布局会了,这是企业项目开发的第一步,还有更重要的无边框窗口,如何设计一个合理的无边框窗口很重要,第三/四章:详细介绍如何实现一个无边框窗口,如何自定义标题栏,如何实现拖拽拉伸;第四章将会介绍如何自定义非标控件,优化Qt界面。第五章:介绍Qt web混合编程,一个商用项目,必然会涉及到web交互,这也是很多Qt开发者的弱项,这一章讲详细介绍C++ Qt web混合开发。第六章:既然是做企业级项目,必然需要和后台交互,http编程也是必要的,将详细介绍http编程,用户注册,登录,后台接口请求等知识;通过第五、六章的学习,将会是你的Qt开发技术更上一层楼。第七章:介绍Qt并发编程,耗时任务处理,进程调用等知识。第八、九章:讲解 Qt 比较重要的知识,图形视图结构,以及MVD模式;通过这两章的学习,大家会对图形视图有更好的了解。第十章:本章是独立章节,主要介绍Qt中一些特殊技巧,项目编译,dpi适配、多语言等知识。第十一章:是我们的企业级项目实战:实现一个视频会议客户端,本项目可以进行多人视频通话,直播,桌面分享等功能,本项目我会从零开始,进行项目搭建,功能调试,bug fixed, 带领大家做一个企业级项目。希望通过本课程的学习,大家的C++ Qt开发技术能有质的飞越,能找到自己心仪的工作。课程中如果讲的不对的地方,请大家指出,我及时修正,我也只是一个普通开发者,也不是所有的技术都会,尽我所能,把我所会的教给大家,让我们一起为Qt的发展,尽一份绵薄之力。 下面是本课程一些项目的截图: 1 可以滑动的设置界面         2 所有图形的绘制       3 视频播放器          4 高仿youku界面         5 视频会议         相信通过本课程的学习,大家有能力实现绝大部分客户端项目,从此用C++ Qt再也不会有难写的界面。

16,211

社区成员

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

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