Seite 1 von 1

QTextEdit repaint() problem

Verfasst: 24. August 2006 12:40
von silversurfer2025
Hallo,

ich habe eine GUI geschrieben bei der ueber einen Button (nach vorheriger konfiguration etc) ein laenger dauernder Vorgang gestartet wird.. Dieser Vorgang sendet nachrichten an die GUI, z.B. shell Ausgaben und Aenderungen an der QProgressbar. In dieser QProgressbar wird der fortschritt des Vorgangs angezeigt. Das Senden von nachrichten ist ueber eine output-methode geregelt, die nachrichten an die progressBar schicken kann und eben auch an eine shell. Nachdem z.B. der Value der progressBar geaendert wurde wird repaint() an das main-widget gesendet.

Was bisher super klappt ist das Fortschreiten des progressbars... Es laeuft solide und "online" hoch zu 100 % und alles ist gut ;).

Mein problem liegt in der Ausgabe in einem QTextEdit. Waehrend des Vorgangs sollen statuszeilen in die shell geschrieben werden, so z.B. "starte extrahierung...fertig" oder "starte Lernvorgang" etc etc. Obwohl der progressbar waehrend des vorgangs geupdatet wird und auch visuell aktualisiert wird passiert eben jenes nicht bei der shell (QTextEdit). Hier kommt der text am ende des Vorgangs komplett..

Wie muss ich ein QTextEdit feld ansprechen um es online zu aktualisieren aus dem laengeren Vorgang? repaint() scheint nicht zu funktionieren..

Vielen lieben Dank fuer eure Hilfe, sollte noch code oder aehnliches von Noeten sein sagt bitte bescheid ;)

Gruesse
Tim

Verfasst: 24. August 2006 15:08
von macman
processEvents, damit die Eventloop deiner Applikation anstehende Dinge erledigen kann, wie eben das aktualisieren anderer Objekte.

Verfasst: 24. August 2006 15:18
von Christian81
macman hat geschrieben:processEvents, damit die Eventloop deiner Applikation anstehende Dinge erledigen kann, wie eben das aktualisieren anderer Objekte.
Das sollte doch aber nur nötig sein wenn der länger dauernde Vorgang *nicht* in einem eigenen Thread ist - so wie ich das verstehe ist dies aber der Fall, oder?

Verfasst: 24. August 2006 17:57
von silversurfer2025
tjaja... also im Moment laeuft das ganze noch seriell, also alles in einem Thread... Ist wohl generell eher keine so gute Idee oder wie seht ihr das so? Ist das ganze denn schwer mit C++ und Qt? Habe nur aus Java erfahrung damit und mir das Ganze noch nicht so zugetraut wenn ich ehrlich bin... Aber mit eurer Unterstuetzung ;)

Es sollte also nicht superschwer sein, ist ja nur der eine thread der zum Hauptelement dazugestartet werden muss... oder?

Zum Thema processEvents: Danke fuer den Tip, ich werde das gleich mal Testen. Schadet nicht wenn man das ganze recht haeufig (nach jedem shell-append) benutzt oder doch?

Vielen Dank fuer die Hilfe
Tim

Verfasst: 24. August 2006 18:20
von Christian81
Schau Dir einfach mal die Beispiele von Qt an - QThread ist eigentlich ganz einfach wenn man sich etwas mit beschäftigt. Dabei ist anzumerken dass nur der gui-Thread (== Hauptthread) zeichnen kann!