Seite 2 von 2

Verfasst: 28. Juli 2005 15:26
von lepsai
Also noch einmal sage ich es nicht: qApp->postEvent(), Betonung liegt auf post...

Verfasst: 28. Juli 2005 15:56
von rulzmaker

Code: Alles auswählen

void MyThread::run()
{
  QEvent *event=new QEvent(QEvent::Paint);
   for(int i=0; i<100; ++i)
    {
	_tabelle->insertRows(i);
	_tabelle->showRow(i);
	_app->postEvent(_app, event);
	sleep(1);
    }
}
Speicherzugriffsfehler
....Das ist das Reslutat!!

PS: Und bitte kein Kommentar wegen dem Speicherleck...daran liegt es 101% nicht

Verfasst: 28. Juli 2005 20:23
von lepsai
Sollte heissen:

_app->postEvent(EmpfängerWidget, event);

Verfasst: 28. Juli 2005 22:31
von rulzmaker
Ja und ? - was denkst du was ich schon alles probiert habe.

PS: Ich denke ich dass ich das eben mit dem custom event gelöst habe.

Verfasst: 28. Juli 2005 22:34
von lepsai
ja natürlich mit CustomEvent, womit denn sonst....

und wenn es gelöst ist, wo ist denn ein problem?

Verfasst: 28. Juli 2005 22:36
von rulzmaker
Das Problem existiert nicht mehr, es war einmal.
Nun, hier das (hoffentlich ständig funktionierende Ergebnis):

Code: Alles auswählen


void MyThread::run()
{
    int i=0;
  
   for( i; i<100; ++i)
    {
	_app->postEvent(_fenster, new CustomEvent());
	sleep(1);
    }
}


void Fenster::customEvent( QCustomEvent * e )
{
    Tabelle->insertRows(0);
    Tabelle->showRow(0);
}
ja natürlich mit CustomEvent, womit denn sonst....
Ist das ironisch gemeint?

Verfasst: 28. Juli 2005 22:40
von lepsai
nein, es ist nicht ironisch gemeint, ich habe schon am anfang unserer Diskussion darauf hingewiesen:
So geht es nicht. Man kann nicht aus einem Thread in der GUI was ändern.
Dafür gibt es QApplication::postEvent() und QCustomEvent. Wir haben das aber schon mal besprochen in diesem Forum....

Re: Thread und die Aktualisierung der Tabelle

Verfasst: 20. Oktober 2016 09:05
von helmut.jakoby
Ich habe das so gelöst:
Thread hat unter signal: eine Methode z.B. sendSignalRead( Typ readObject ) welches in der Methode ::run() nach dem Einlesen eines Objektes mittels emit mit dem gelesenen Objekt als Parameter aufgerufen wird.
Die Klasse mit der Tabelle, welche das gelesene Objekt anzeigen soll, hat zum Einfügen eine Methode, welche als Slot deklariert ist.
Wenn der Thread instanziiert wird und ein Objekt mit der Tabelle existiert, wird die Verbindung des Signals zum Slot über connect hergestellt und dann gestartet.
Achtung! Wenn Objekt im Thread neu instanziiert wird, muss der ‚fangende‘ Slot das Objekt ggf. aus dem Speicher entfernen.
voilà