我想在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指向的内存。

10-08 11:00