繁体   English   中英

从QGraphicsScene删除Qpixmap

[英]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手动删除项目。

http://doc.trolltech.com/4.7/qgraphicsscene.html#removeItem

如建议

您需要在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM