Pro QThread ein neues Fenster erzeugen+ein video anzeigen

Alles rund um die Programmierung mit Qt
Antworten
marvin
Beiträge: 29
Registriert: 23. Mai 2010 11:58

Pro QThread ein neues Fenster erzeugen+ein video anzeigen

Beitrag von marvin »

Hallo zusammen,
ich hab im Rahmen eines Hochschulprojekts ein kleines Problem mit QT
ich habe folgende Klasse abgeleitet von der QThread klasse die mir als Basisklasse zum Aufnehmen von Kamera bildern dient.

#include <QThread>

class RecordBase : public QThread
{
public:
RecordBase(QObject *apParent = 0);
~RecordBase();

//...
}

Nun möchte ich Pro kamera Objekt welches auch je ein QThread zur aufnahme hat, ein neues QT Fenster erzeugen in dem das Live bild der kamera angezeigt wird. Der Buffer in dem die aktuelle Bild information steckt ist bereits vorhanden. und ist in dieser form:

char *lpImageBuffer = (char *) lCapture.Buffer();


vielen dank für eine hilfestellung beziehungsweise etwas code wie ich dann für je einen dieser Threads ein neues fenster erzeug und wie das dann aussehen muss das dort ein live capture von dem ImageBuffer bild abläuft.

mfg
marvin
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Such mal hier im Forum nach opencv, dann stößt du nach ein bissel lesen auf eine Funktion, die dir ein Ipimage in ein QImage umwandelt.

Dann versuch doch mal in denem Thread ein QLabel zu erstellen und es mit show() o.ä. anzeigen zu lassen. Dem Label kannste dann immer in einer Schleife ein neues QPixmap zuordnen, welches du aus dem QImager erstellen kann.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

kater hat geschrieben:Dann versuch doch mal in denem Thread ein QLabel zu erstellen und es mit show() o.ä. anzeigen zu lassen. Dem Label kannste dann immer in einer Schleife ein neues QPixmap zuordnen, welches du aus dem QImager erstellen kann.
Nein, das geht nicht, versuchen kann er es trotzdem mal ;)
Man kann nur aus dem Main-Thread (QApplication::instance()->thread()) zeichnen. Das heißt z.B. QLabel::setText(), update(), aber auch ein Label neu erstellen.
Wenn du aus einem anderen Thread als dem Hauptthread an die GUI ran willst, musst du dies über SIGNAL/SLOT erledigen. Wenn neue Daten anstehen, ein schnelles emit(), und im Hauptthread wieder abfangen.

QPixmap ist auch nicht ganz unproblematisch. Wenn du aus einem anderen Thread auf so eines malen willst, muss das Pixmap auch in jenem erstellt worden sein. Mit QImage hast du auch das Problem nicht.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Ach stimmt. Keine GUI aus einem Thread. Hab das schon so oft hier gelesen aber noch nie selbst gemacht. Daher vergesse ich das immer.
Antworten