Habe in einem Thread eine Schleife laufen lassen um frame für frame ein video im Graphics View Widget anzeigen zu lassen.
Läuft alles so weit, jedoch wird mein speicher vollgeladen und ich wei0 nicht warum.
Wenn ich
IplImage hört sich nach OpenCV an.
Ich denke auch, der Schuldige ist nicht addPixmap, sondern die ganze set_imageone-Funktion.
Du erzeugst immer weitere, neue scenes, ohne die alte zu löschen. Warum überhaupt? Arbeite mit nur einer scene, merk dir das PixmapItem und setz nur da das neue Image.
hat leider nichts gebracht.
Aber wenn ich ganz am ende scene->clear() ausführe dann wird kein bild angezeigt aber auch der speicher bleibt konstant. ne idee ?
QGraphicsScene::addPixmap() gibt ein QPixmapItem* zurück, DAS speicherst du dir, und auf dem rufst du dann setPixmap() auf.
Dass ein clear() am Ende alles löscht ist klar. Dass ohne clear() ständig neue Pixmaps in die scene gelegt werden, ohne die alten zu löschen, ist auch klar (wenn man sich mal die Doku durchliest).
ich glaub gemeint ist, dass du nur einmal ein QGraphicsPixmapItem erstellst und zur Scene hinzufügst.
Dieses item speicherst du dir dann als membervariable und dann jedes mal wenn du ein neues Pixmap anzeigen willst, rufst du nur QGraphicsPixmapItem::setPixmap ( const QPixmap & pixmap ) auf.
GUI::GUI(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
...
scene = new QGraphicsScene(); // Grafikszene
scene->setBackgroundBrush(QColor(0, 0, 0)); // Schwarzer Hintergrund
ui.graphicsView->setScene(scene);
mPixmapItem = new QGraphicsPixmapItem; // mPixmapItem ist hier eine Membervariable, damit wir später wieder draufzugreifen können
scene->addItem(mPixmapItem);
}
void GUI::set_imageone(IplImage *image){
mPixmapItem->setPixmap(QPixmap::fromImage(ConvertImage(image)));
}