Thread und die Aktualisierung der Tabelle

Alles rund um die Programmierung mit Qt
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Also noch einmal sage ich es nicht: qApp->postEvent(), Betonung liegt auf post...
rulzmaker
Beiträge: 70
Registriert: 19. Juli 2005 23:00
Kontaktdaten:

Beitrag 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
Debian 2.4.27-1-386
[...]peace, love and empathy
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Sollte heissen:

_app->postEvent(EmpfängerWidget, event);
rulzmaker
Beiträge: 70
Registriert: 19. Juli 2005 23:00
Kontaktdaten:

Beitrag 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.
Debian 2.4.27-1-386
[...]peace, love and empathy
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

ja natürlich mit CustomEvent, womit denn sonst....

und wenn es gelöst ist, wo ist denn ein problem?
rulzmaker
Beiträge: 70
Registriert: 19. Juli 2005 23:00
Kontaktdaten:

Beitrag 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?
Debian 2.4.27-1-386
[...]peace, love and empathy
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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....
helmut.jakoby
Beiträge: 19
Registriert: 17. Januar 2012 15:26
Kontaktdaten:

Re: Thread und die Aktualisierung der Tabelle

Beitrag 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à
Antworten