在处理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));
.....