[英]Removing Qpixmap from QGraphicsScene
处理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正在显示摄像机的视图,但不幸的是,调用scenes.at(0)->addPixmap(QPixmap::fromImage(Img));
时内存泄漏scenes.at(0)->addPixmap(QPixmap::fromImage(Img));
我认为removeItem
函数应该破坏旧的QPixmap,但显然不是。 您知道泄漏发生的原因以及如何解决吗?
从Qt文档中:
无效的QGraphicsScene :: removeItem(QGraphicsItem * item)
从场景中删除该项目及其所有子项。 项目的所有权会传递给调用方(即QGraphicsScene在销毁时将不再删除项目)。
另请参见addItem()。
因此,您需要使用delete
手动删除项目。
如建议
您需要在removeItem行之后删除该项目。
即
QPointer _item = scenes.at(0)-> items()。at(0); scenes.at(0)-> removeItem(_item); 删除_item;
scenes.at(0) - > addPixmap(的QPixmap :: fromImage(IMG));
.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.