Extracción de QPixmap QGraphicsScene
-
27-09-2019 - |
Pregunta
Me enconutered un problema, cuando se trata de QGraphicsScene y QPixmap. Estoy mostrando secuencialmente marcos, captadas por la cámara. QTimer objeto está llamando a la función updateSingleView () cada 100 ms. Esa es mi función interna:
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 está mostrando la vista de la cámara, pero desafortunadamente no hay una pérdida de memoria, al llamar scenes.at(0)->addPixmap(QPixmap::fromImage(Img));
pensé que la función removeItem
debe destruir la vieja QPixmap, pero al parecer no lo es. ¿Sabe por qué se produce la fuga y cómo solucionarlo?
Solución
Como se ha sugerido
es necesario eliminar el artículo después de la línea removeItem.
es decir
.QPointer _item = scenes.at (0) -> artículos () en (0); scenes.at (0) -> removeItem (_item); _item borrado;
scenes.at (0) -> addPixmap (QPixmap :: fromImage (Img));
.....
Otros consejos
A partir de la documentación de Qt:
vacío QGraphicsScene :: removeItem (* QGraphicsItem artículo)
Elimina el elemento artículo y todos sus niños de la escena. La propiedad de elemento se transmite a la persona que llama (es decir, se QGraphicsScene artículo ya no borrado cuando se destruye).
Ver también addItem ().
Por lo tanto es necesario eliminar el elemento utilizando delete
manualmente.