Hallo Leute,
ich bin sozusagen "bloody beginner" mit Qt und habe folgendes Problem:
Ich möchte mit Hilfe der QLCDNumber Klasse einen Zähler anzeigen, den ich in einer Schleife hochzählen:
[code]
for(i=0; i<5; i++){
clock_t endwait;
endwait = clock () + ticktime * CLOCKS_PER_SEC;
while (clock() < endwait) { }
LCDCounter->display(i);
}
[/code]
Leider zeigt der LCDCounter (=Objekt der QLCDNumber Klasse) nur den Endwert von i (hier: 4) an, nicht aber die Zwischenwerte.
Wie schaffe ich es, dass der Counter jeden Wert von i anzeigt?
Scheinbar reagiert das Objekt nicht auf die Anweisung "LCDCounter->display(i)".
Danke für eure Hilfe!
~~~ Tinitus ~~~
LCDNumber aus Schleife heraus refreshen
Code: Alles auswählen
while (clock() < endwait) { } * kein Eventhandling
* daher (falls der Code im Mainthread ist) kein GUI-Update mehr
* der Vorgang kann nur schlecht abgebrochen werden
* ein CPU-Core wird komplett belegt (=50% CPU-Last bei einem heutigen Dual-Core, 100% Rechnerlast bei einem älteren System)
* Alternativen sind einfach zu implementieren (anstatt "Polling" mit Events arbeiten)
* daher (falls der Code im Mainthread ist) kein GUI-Update mehr
* der Vorgang kann nur schlecht abgebrochen werden
* ein CPU-Core wird komplett belegt (=50% CPU-Last bei einem heutigen Dual-Core, 100% Rechnerlast bei einem älteren System)
* Alternativen sind einfach zu implementieren (anstatt "Polling" mit Events arbeiten)
Zuletzt geändert von solarix am 5. Mai 2009 09:51, insgesamt 1-mal geändert.
Dein Konstrukt blockiert einfach die EventLoop. So lange du in deiner Funktion rumrödelst, so lange kann nicht in die EventLoop gesprungen werden und die Events abgearbeitet werden. Somit auch kein Neuzeichnen.
Außerdem ist dein clock() < endwait ist eine Art wait(), welches ticktime * CLOCKS_PER_SEC lange wartet.
Du kannst es ja jetzt mal versuchen, mit QApplication::processEvents() in der Schleife jedesmal deine Events abzuarbeiten. Aber das finde ich immer noch nicht sooo schön. Alle paar Microsekunden in die EventLoop springen... Aber naja.
Besser wäre, wenn du einen Timer verwendest, und dir in definierten Intervallen ein Signal senden lässt und dieses verarbeitest.
Außerdem ist dein clock() < endwait ist eine Art wait(), welches ticktime * CLOCKS_PER_SEC lange wartet.
Du kannst es ja jetzt mal versuchen, mit QApplication::processEvents() in der Schleife jedesmal deine Events abzuarbeiten. Aber das finde ich immer noch nicht sooo schön. Alle paar Microsekunden in die EventLoop springen... Aber naja.
Besser wäre, wenn du einen Timer verwendest, und dir in definierten Intervallen ein Signal senden lässt und dieses verarbeitest.