2012-03-29 72 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

相關問題