Seite 1 von 1

update() forcieren ohne processEvents()

Verfasst: 25. April 2006 18:59
von OTTO
Hi,

gibt es eine Möglichkeit einem Widget zu sagen, dass es sich neu zeichnen soll ?
Genauer gesagt habe ich eine Textbox die als Ausgabe-Console dient. Diese Textbox soll bei jeder Änderung neu gezeichnet werden. Das klappt allerdings nur, wenn keine längeren Funktionen ausgeführt werden.

Code: Alles auswählen

on_clicked_Button()
{
     schleife( 10min )
     {
           ..
           output << "tut momentan folgendes: ...";
           ..
     }
}
Meine erste Lösung dafür war:
update() oder repaint() der Textbox
QCoreApplication::processEvents();

Das Problem hierbei ist allerdings, dass dabei die zeitliche Reihenfolge durcheinanderkommen kann. Zum Beispiel wenn man einen Button drückt, während der andere Code ausgeführt wird, der processEvents() aufruft.

Gibt es alternativen zu update()/repaint() ? Oder kann man eventuell steuern, welche Events ausgeführt werden ? Oder speziell nur die Events eines Widgets ?

Vielen Dank für eure Hilfe !

Verfasst: 25. April 2006 19:05
von uhu01
Hy!

Eine direkte Lösung kann ich dir nicht anbieten, aber was spricht dagegen einen Thread dafür zu benutzen? Dann kann dein Programm sich so oft neu zeichnen wie es will, die setzt die Buttons die nicht gedrückt werden sollen inaktiv, und der Thread kann über ein Signal (mit connect( .., .., .., .., Qt::QueuedConnection) connecten) eine Statusanzeige, das Textfeld, oder was auch immer "steuern"

mfg
uhu01

Verfasst: 26. April 2006 13:05
von OTTO
mmmmmh, an threads hatte ich jetzt garnicht gedacht.
Ich probiers mal aus, danke !

Das Problem mit dem update()/repaint() hat sich übrigens als milder herausgestellt als ich anfangs dachte. Mein TestCode war wohl nicht Multi-Thread-fähig genug. Die Console zeichnet sich jetzt auch ohne processEvents() neu.