Seite 1 von 1

Grafikfehler durch for-Schleife

Verfasst: 28. April 2010 08:26
von bart simpson
Hallo zusammen,
ich schreibe gerade meine Bachelorarbeit und bin auf ein Problem gestoßen bei dem nicht wirklich weiter weiß.

Mein Programm besteht im wesentlichen aus einem QMainWindow und einem Dialog der den Fortschritt über eine QProgressBar anzeigt.

Die Aufgabe besteht darin eine Config-Datei zu parsen (funktioniert wunderbar & schnell) und diese Daten in ein QTreeWidget einzufügen. Das einfügen wird in einer for-Schleife erledigt und dauert einfach ne ganze Weile (noch nicht optimiert, aber es läuft mal).

Das Problem besteht darin das wenn ich in der Zeit in der die for-Schleife abläuft und der Fortschrittsdialog immer wieder aktualisiert wird ein paar mal auf das QMainWindow oder den Dialog klicke plötzlich alle Qt Fenster weiß werden und in der Titlezeile "...(Keine Rückmeldung)" steht.
Wenn alles fertig verarbeitet ist wird das Fenster wieder korrekt dargestellt.

Mein Chef meint das das dadurch kommt das in der Zeit in der ich in der Schleife hänge die Callbacks von Windows nicht richtig verarbeitet werden können.

Eine Lösung wäre seiner Meinung nach den Prozess in einen seperaten Thread auszuführen oder in der Schleife irgendwie die Callbacks zu verarbeiten.

Wie würdet ihr dieses Problem lösen?


Schon mal vielen Dank im voraus!!

Grüße
Bart

Verfasst: 28. April 2010 08:46
von kater
Schleife in einen Thread legen. Qt bietet ja genug Möglichkeiten :)

Viel Erfogl noch bei deiner Arbeit!

Verfasst: 28. April 2010 09:03
von bart simpson
Danke für deine Antwort.

Würde dann bedeuten ich muss eine neue Klasse anlegen die von QThread erbt und dann die schleife irgendwie reinpacken.
Oder gibts noch bessere/einfachere Möglichkeiten?

Gruß
Bart

Verfasst: 28. April 2010 10:29
von chrislo1976
Hallo!

Du könntest innerhalb der Schleife auch

Code: Alles auswählen

processEvents(...)
ausführen...

Gruß,
Christian

Verfasst: 28. April 2010 11:45
von bart simpson
Super, vielen Dank!
Genau das hab ich gesucht, funktioniert super und ich brauch praktisch nichts an meinem Code ändern :)

Gruß

Verfasst: 28. April 2010 16:13
von kater
Ist halt nicht schön ein paar 100 mal pro Sekunde diese Funktion ausführen. Also wenn du dann die Geschwindigkeit deines Programms optimiertst, weisst du wo du anfangen kannst

Verfasst: 28. April 2010 16:20
von bart simpson
Danke, ich werde daran denken.
Aber im moment ist nur wichtig das es irgendwie funktioniert, die Deadline ist auch nicht mehr so weit entfernt und es gibt noch jede Menge arbeit...

Gruß