Für Signal/Slot Verbindungen zwischen Objekten in zwei Threads gibt es mehr oder weniger zwei Möglichkeiten:
- Direkte Verbindung
- Indirekte Verbindung
Bei ersterem erfolgt der Slotaufruf wie im Singlethread Fall direkt, d.h. der Thread, der emit ausführt, führt auch den Slot aus.
Erreicht wird das durch Angabe von Qt:irectConnection als fünften Parameter von conenct().
Logischerweise obliegt es dann dem Applikationscode die Threadsicherheit zu gewährleisten.
Bei der zweiten Möglichkeit (normales connect() oder Angabe von Qt::QueuedConnection als fünften Parameter) werden die Argumente des Signals mittels Event an das Empfängerobjekt geschickt, der Aufruf des Slots erfolgt damit im Zielthread.
Die Vorraussetzung dafür ist das Laufen der Eventverarbeitung im Zielthread. Im Falle des Hauptthreads ist das üblicherweise durch app.exec() gewährleistet (was in deinem Fall fehlt).
Funktioniert bei mir einwandfrei wenn ich qDebug() durch cout ersetze und << endl am Ende der Zeile hinzufüge.Edit: Kann mir auch noch jemand kurz erklären, warum cout Ausgaben nicht mehr im Terminal erscheinen, sonderm man stattdessen qDebug verwenden muss. Ich muss mein Programm, wenn es mal fertig ist, anderen Leuten vorstellen und da wäre es natürlich gut, wenn ich sowas auch begründen könnte
Ciao,
_
Lesezeichen