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.
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:
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.
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.
Tags und Links qt opencv qthread signals-slots