Thread-übergreifendes connect um Signal weiter zu geben

Alles rund um die Programmierung mit Qt
Antworten
Paddel
Beiträge: 11
Registriert: 23. Dezember 2011 11:38

Thread-übergreifendes connect um Signal weiter zu geben

Beitrag von Paddel » 30. Januar 2012 16:14

Hallo liebe Qt-Gemeinde,

ich habe das Threaded Fortune Server Example etwas abgeändert für meine Zwecke.
Jedenfalls will ich dort vom Thread "thread" ein Signal per connect an den main-Thread weitergeben. Das Signal beinhaltet einen String, den ich in der View ausgeben möchte.

passieren soll das folgendermaßen:

Code: Alles auswählen

connect( thread, SIGNAL(drawNow(int, QString)), "mainThread", SLOT(drawData(int, QString)));
oder

Code: Alles auswählen

connect( this, SIGNAL(drawNow(int, QString)), "mainThread", SLOT(drawData(int, QString)));
Die Frage, die sich mir jetzt stellt, ist, wie der main Thread heißt. Der wird ja nie wirklich erzeugt...

ich hatte den connect auch schon im "mainThread" eingebaut gehabt, jedoch bringt das ja nix, solang der Thread "thread" ja noch gar nicht erzeugt wurde.

any solutions?

Danke.

Patrick

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Thread-übergreifendes connect um Signal weiter zu geben

Beitrag von Christian81 » 30. Januar 2012 18:09

Es gibt keine Signals zwischen Threads sondern nur zwischen Objekten. Und wie das Zielobjekt heißt musst Du schon wissen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Thread-übergreifendes connect um Signal weiter zu geben

Beitrag von solarix » 7. Februar 2012 00:26

Paddel hat geschrieben: Jedenfalls will ich dort vom Thread "thread" ein Signal per connect an den main-Thread weitergeben. Das Signal beinhaltet einen String, den ich in der View ausgeben möchte.
..
Die Frage, die sich mir jetzt stellt, ist, wie der main Thread heißt. Der wird ja nie wirklich erzeugt...
Du verstehst da was falsch: du möchtest nicht in Signal "vom einem Thread in den anderen" senden sondern "von einem QObject, welchen im Thread A lebt zu einem QObject, welches im Thread B lebt" senden.
Daher ist Lösung einfach:

Code: Alles auswählen

view = new QWidget.... // oder sonst was..
thread = new MyThread... 
connect( thread, SIGNAL(drawNow(int, QString)), view, SLOT(drawData(int, QString)));
Ich hoffe, du hast Threading+Signals/Slots verstanden.. sonst wirst du bald Probleme bekommen..

Das was du unter "mainthread" verstehst, ist übrigens "qApp->thread()".. was übrigens bezogen auf das obige Beispiel auch == view->thread() ist.. aber das bringt dir nichts, weil diese Thread-Instanz kein Slot "drawData(int, QString)" haben kann ;)

hth..

Antworten