Seite 1 von 1

update() verzögert auf zweitem Fenster.

Verfasst: 27. November 2009 22:35
von oracle
Hallo,


Ich habe ein ganz simple und wohl eine ziemlich dämliche Frage: Wie kann ich auf einem externen, zweiten Fenster Informationen in Echtzeit anzeigen?

In mehreren automatischen Schritten ( .. ohne user interaktion ) werden Bildveränderungen durchgeführt, die Veränderungen werden nach jedem Schritt auf meinem Hauptfenster angezeigt. Nun möchte ich zusätzlich ein weiteres Fenster öffnen und dort Informationen wie Histogramm und weitere Statistiken anzeigen. Diese werden zwar angezeigt .. allerdings erst wenn die ganze Bearbeitung durch ist, und nicht wie gewünscht nach jedem Schritt.

Dabei erstelle ich ein neues QWidget mit dem Qt::Window Flag, übergebe nach jedem Schritt die Infos die ich haben will, und versuche ein update() / repaint(). Diese werden allerdings NICHT ausgeführt.

Woran mag das liegen? / Oder anders: wie würdet ihr sowas realisieren? ( .. sollte ja wohl nicht so ne Sache sein, oder? )

Verfasst: 28. November 2009 14:15
von franzf
Eigentlich zu wenig Info ;)
Aber ich bin mir sicher, dass du deine Bildbearbeitung nicht in einem eigenen Thread durchführst.
Das Problem ist, dass deine Routine in einem großen Rutsch durchgeführt wird. Das blockiert die Event-Queue, wodurch wartende events erst abgearbeitet werden, wenn deine komplette Bildbearbeitung durch ist. Darum gibts auch erst dann ein Update deines Histogramms.
Am besten du separierst jeden Bearbeitungsschritt in ne eigene Funktion/Klasse. Wenn die Berabeitung fertig ist, gibts ein SIGNAL finished(), an das sich dein Hsitogram->update() hängt.
Dann kann das HistogramWidget selber ein signal updateFinished() senden, woraufhin du den nächsten Bearbeitungsschritt startest.
Darunter leidet aber die Geschwindigkeit der Bildbearbeitung, wenn diese immer wieder unterbrochen wird.

Am besten nimmst du deshalb für die Bearbeitung nen eigenen Thread. Dort kannst du nach jedem Bearbeitungsschritt ein Signal versenden, welches in der main-EventLoop verarbeitet wird, und es kann gleich weiter bearbeitet werden.

Verfasst: 28. November 2009 17:22
von oracle
ok, merci für die Antwort.

ich versuche das nun mal.