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?

¿Fue útil?

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.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top