在处理QGraphicsScene和QPixmap时,我遇到了一个问题。
我正在依次显示由相机捕获的帧。 QTimer对象每100毫秒调用一次updateSingleView()函数。那是我的内部功能:

void CCIGui::updateSingleView()
{

    unsigned char *const img = PGRSystem->SnapShot();

    QImage Img(img, 1024, 768, QImage::Format_RGB888);

    scenes.at(0)->removeItem(scenes.at(0)->items().at(0));
    scenes.at(0)->addPixmap(QPixmap::fromImage(Img));

    ui_camViews.at(0).graphicsView->setScene(scenes.at(0));

    delete [] img;
}

Gui正在显示摄像机的 View ,但是很不幸,在调用scenes.at(0)->addPixmap(QPixmap::fromImage(Img));时内存泄漏,我认为removeItem函数应该破坏旧的QPixmap,但显然不会。您知道泄漏发生的原因以及如何解决吗?

最佳答案

如建议

您需要在removeItem行之后删除该项目。



QPointer _item = scenes.at(0)-> items()。at(0);
scenes.at(0)-> removeItem(_item);
删除_item;

scenes.at(0)-> addPixmap(QPixmap::fromImage(Img));

.....

10-01 20:06