Grafikfehler durch for-Schleife

Alles rund um die Programmierung mit Qt
Antworten
bart simpson
Beiträge: 4
Registriert: 27. April 2010 14:36

Grafikfehler durch for-Schleife

Beitrag 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
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Schleife in einen Thread legen. Qt bietet ja genug Möglichkeiten :)

Viel Erfogl noch bei deiner Arbeit!
bart simpson
Beiträge: 4
Registriert: 27. April 2010 14:36

Beitrag 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
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Hallo!

Du könntest innerhalb der Schleife auch

Code: Alles auswählen

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

Gruß,
Christian
bart simpson
Beiträge: 4
Registriert: 27. April 2010 14:36

Beitrag von bart simpson »

Super, vielen Dank!
Genau das hab ich gesucht, funktioniert super und ich brauch praktisch nichts an meinem Code ändern :)

Gruß
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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
bart simpson
Beiträge: 4
Registriert: 27. April 2010 14:36

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