我想在qt标签上显示图像。我正在以QByteArray
的形式获取图像数据,并将其加载到标签中。
下面是代码:
在构造函数中定义
QPixmap *pixmapTest;
pixmapTest = NULL;
下面的代码在一个函数中,该函数被多次调用:
RequestCompleted(QNetworkReply *reply)
{
if(pixmapTest){
qDebug()<<"delete showImage Pixmap Object";
delete pixmapTest;
pixmapTest = NULL;
}
pixmapTest = new QPixmap();
QByteArray jpegData = reply->readAll();
pixmapTest->loadFromData(jpegData);
ui.qtLabel->setPixmap(*pixmapTest);
}
调用此函数约500次后,出现此错误
QImage: out of memory, returning null image.
我没有在上面的代码中得到什么错误。有人可以告诉我如何解决吗?
最佳答案
首先,在被多次调用的函数中为变量(pixmapTest
)分配和取消分配内存是不够的。您应该先分配内存,然后全部取消分配。例如:
pixmapTest = new QPixmap();
for(size_t i = 0; i < 1000; i++){
// Call that function
}
delete pixmapTest;
除此之外,听起来您的应用程序正在泄漏内存。请注意,删除
pixmapTest
并不意味着删除jpegData
指向的内存。因此,在每个函数调用中,您应注意jpegData
指向的内存。