Seite 1 von 1

Thread-übergreifendes connect um Signal weiter zu geben

Verfasst: 30. Januar 2012 15:14
von Paddel
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

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

Verfasst: 30. Januar 2012 17:09
von Christian81
Es gibt keine Signals zwischen Threads sondern nur zwischen Objekten. Und wie das Zielobjekt heißt musst Du schon wissen.

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

Verfasst: 6. Februar 2012 23:26
von solarix
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..