bei mir "hängt's" mal wieder...
Ich habe einen "Thread" der gut funktioniert. Meine Frage:
Gibt es eine Möglichkeit, dass - wenn der Thread beendet ist - er ein "Signal" sendet?
Irgendwas mit QSignal vielleicht? Was muss ich wie und wo machen?
void cw_trainerWidget::lineEditInput_returnPressed()
{
a.start(); // start thread
}
void cw_trainerWidget::threadBeendet() <<<========
{
// Damit ich hier weitermachen kann
}
Vielen Dank im Vorraus
Olaf
Zuletzt geändert von dl4dz am 14. September 2007 20:31, insgesamt 1-mal geändert.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Schön das Du Qt3 noch erwähnst. Da es das Signal noch nicht gibt, erstell Dir selber eins und emittiere es, wenn dein Thread fertig ist. Sind ja nur zwei zusätzliche Zeilen in deinem Code.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Ja, das Problem ist nur WIE und WO.
Ich habe bislang noch nicht viel mit QT gemacht, bin also ein Anfänger und habe noch nichts dazu gefunden, was ich verstehe.
Das Wie wird sehr gut in der Doku erklärt, passende Beispiele gibt es auch. http://doc.trolltech.com/3.3/signalsandslots.html
Und das Wo? Du wirst ja wohl wissen wann dein Thread fertig ist. Als letzter Befehl kommt dann eben ein emit mySignal(); rein.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Danke für den Hinweis. Ich habe die Seite studiert.
Soviel weiß ich jetzt. Signals und Slots funktionieren nur bei "Objekten". Mein "Thread" ist aber kein Objekt. Also ist auch erst mal nix mit "Signals".
Ich habe mir das Beispiel angesehen. Das Problem ist...Ich verstehe es einfach nicht. Ich bräuchte mal ganz konkrete Hilfe
Was muss ich wo in meinem Code (siehe oben) ergänzen?
class ColorChangeEvent : public QCustomEvent
{
public:
ColorChangeEvent( QColor color )
: QCustomEvent( 65432 ), c( color ) {}
QColor color() const { return c; }
private:
QColor c;
};
// To send an event of this custom event type:
ColorChangeEvent* ce = new ColorChangeEvent( blue );
QApplication::postEvent( receiver, ce ); // Qt will delete it when done <<<<======
// To receive an event of this custom event type: <<<<======
void MyWidget::customEvent( QCustomEvent * e )
{
if ( e->type() == 65432 ) { // It must be a ColorChangeEvent
ColorChangeEvent* ce = (ColorChangeEvent*)e;
newColor = ce->color();
}
}
Der Receiver ist fderjenige Thread der das Event empfangen soll. In deinem Fall wohl der Main-/Gui-Thread. D.h. Du musst deinem erzeugten Thread einen Pointer auf den Mainthread übergeben.