Wie sende ich ein Qt-Signal mit einem cv :: Mat?

8

Kurz gesagt, bekomme ich folgenden Fehler:

%Vor%

Was ich versuche ist, ein Signal mit zwei cv :: Mat-Bildern von einem QThread zum Haupt-Thread zu senden, damit ich die Ausgabe anzeigen kann. Es gibt keinen Kompilierzeitfehler, aber wenn ich das Programm ausführe, bleibt es an einem Haltepunkt in qglobal.h ( inline void qt_noop() {} ) hängen.

Ich habe versucht, Q_DECLARE_METATYPE(cv::Mat) zum Code hinzuzufügen, ohne Erfolg. Ich bin ziemlich scheiße, was ich jetzt tun soll.

code

In einer QThread-Klasse:

%Vor%

Erfassen in einer QObject-Klasse:

%Vor%

Im Hauptteil:

%Vor%

Das Ändern der Signal-Slot-Variablen in QSharedPointer< cv::Mat > funktioniert ebenfalls nicht. Gibt den gleichen Fehler:

%Vor%

FUNKTIONIERT

Alles klar, es scheint zu funktionieren. Ich habe qRegisterMetaType< cv::Mat >("cv::Mat"); direkt vor dem QObject::connect -Aufruf bewegt. Allerdings muss ich immer noch 'F5' hinter den Breakpoint in qglobal.h, es funktioniert danach.

Ich könnte mich irren, aber es scheint, dass die Position von qRegisterMetaType nicht trivial ist.

    
Raf Berkvens 10.03.2012, 11:37
quelle

1 Antwort

3

Sie müssen qRegisterMetaType zusätzlich zum Makro (oder statt dessen, abhängig davon) aufrufen auf Ihre Bedürfnisse). Dies ist erforderlich, damit die Signale Ihre Daten über Threads verteilen können. Es könnte jedoch eine klügere Idee sein, einen Verweis oder einen Smart-Zeiger oder einen rohen Zeiger zu übergeben, wenn Sie die Objekt-Lebensdauer mit der QObject-Hierarchie verwalten.

    
Tamás Szelei 10.03.2012, 11:42
quelle

Tags und Links