2012-03-29 217 views
0

我有一个qt symbian项目,并且我在QMainWindow的const字符上编程设置了背景图片。但是我发现那个bug,如果我打开并关闭那个QMainWindow例如15次,我用于背景的pixmap返回null。我在我的静态类中创建了这个pixmap,我在执行期间保留了一些信息,但这对我的情况没有帮助。我会很感激任何帮助。下面是一些代码示例qt qpixmap在一段时间后返回null

SettingsWindow::SettingsWindow(QWidget *parent) : 
QMainWindow(parent), ui(new Ui::Settings) 
{ 
ui->setupUi(this); 
// getting screen geometry 
QDesktopWidget* desktopWidget = qApp->desktop(); 
QRect screenGeometry = desktopWidget->screenGeometry(); 

ConstantVariables* pointer = ConstantVariables::CVinstance(); 

set image with screen geometry 
QPalette* palette = new QPalette(); 
palette->setBrush(QPalette::Background,*(new QBrush(pointer->backGround->scaled(screenGeometry.width(),screenGeometry.height())))); 
setPalette(*palette);  

回答

0

你将不得不逐步完成源验证这一点,但会要求QPixmap构造函数返回null一种情况是,如果它不能为像素图分配足够的内存。 (我们有非常大的图像这个问题。)

你是否成功释放用于以前的pixmaps的内存?在执行应用程序时运行内存分析器并查看内存是否泄漏。

+0

有一些内存泄漏,但是,当打开QMainWindow时,我一次又一次不加载pixmap。我在main上加载pixmap,并在QMainWindow启动时使用它。在关闭QMainWindow我删除用户界面,所以必须没有内存泄漏我找不到内存泄漏。 – Utk12 2012-03-30 10:40:50

+0

创建qbrush可能是内存泄漏的原因? – Utk12 2012-03-31 07:03:18

+0

是的,我敢打赌是这样。将图像传递给构造函数可能会使图像的*副本*存储在QBrush实例中。既然你是在堆上创建它,并且从不删除它或它的任何父母,那么这是一个很大的漏洞。内存分析器(Valgrind)可以证实这一点。 – 2012-04-12 12:28:10