• 5698阅读
  • 4回复

关于QT内存回收的问题,请各位指点一下,感谢! [复制链接]

上一主题 下一主题
离线qiudeyezi
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-05
— 本帖被 XChinux 执行加亮操作(2009-04-05) —
我在QT图形界面程序开发过程中,遇到了QT内存回收不了的情况,具体情况表现为:
从上一级菜单进入到下一级菜单时,内存会增多,但是从下一级菜单返回至上一级时,内存却并没有相应的减少,在执行多次上一级和下一级菜单的切换后,导致内存耗尽死机。
在构造函数时我已经设置了parent,按说应该是会在析构函数中就可以释放掉了,可是用top命令观察时,发现内存还是在不断增多。
而且,因为图形界面上要做图标,所以我在图形界面上采用了贴图的方法,方法如下:
{
QPainter* p = new QPainter;
p->begin(this);
pixmap = new QPixmap("../../1.png");
p->drawPixmap( 0,0,*pixmap );
p->setBackgroundMode( QT::TransparentMode);
p->end();
delete p;
}
虽然使用了delete p; 删除了QPainter,但是使用QPainter贴的图是否也是一起释放掉的?
所以想请教大家有没有什么好的建议?感谢!!!
[ 此帖被qiudeyezi在2009-04-05 16:26重新编辑 ]
离线qiudeyezi
只看该作者 1楼 发表于: 2009-04-05
sorry,忘记说我如何释放内存的了,我直接是使用的closeEvent()函数,然后QCloseEvent* event->accept();
是否是这种方法是不能够完全释放的呢?
[ 此帖被qiudeyezi在2009-04-05 15:50重新编辑 ]
离线XChinux

只看该作者 2楼 发表于: 2009-04-05
没有吧。

把下面两句改一下:
pixmap = new QPixmap("../../1.png");
p->drawPixmap( 0,0,*pixmap );

改成新的:
p->drawPixmap(0, 0, QPixmap("../../1.png"));

就行了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线qiudeyezi
只看该作者 3楼 发表于: 2009-04-06
多谢版主  我试一下
离线jzj139
只看该作者 4楼 发表于: 2009-04-07
很明显没有释放掉。
pixmap = new QPixmap("../../1.png"); //你的pixmap是class的成员变量。而且不是你的主窗口的子窗口
qt
快速回复
限100 字节
 
上一个 下一个