PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt: for-Anweisung



marcopi
20-03-2002, 10:48
Hallo

Versuche mit einem Button den Wert einer QSpinBox zu ändern. Solange ich den Button gedrückt halte soll der Wert um 10 verkleinert werden ( mit hilfe von QTimer alle 0,5 Sekunden) Läuft auch wunderbar.
Habe dann eine for-Anweisung eingebaut um diesen Vorgang auf 5mal zu reduzieren.



void Form1::slotTimerTimeout()
{

spinbox_value = spinbox->value(); //rückgabewert spinbox
p = button_down->isDown(); //button pressed


if(p && spinbox_value > 1010 )
{
for (int i=0;i<5;i++)
{
spinbox_value-=10;
spinbox->setValue(spinbox_value);
}
}

}



Allerdings wird der Wert jetzt jedesmal um 50 verkleinert. Kann mir jemand sagen was ich falsch mache

Danke Marco:confused:

peschmae
20-03-2002, 11:11
die for - schleife sieht irgendwie von weitem so aus, als würde sie
den Wert fünfmal um 10 verkleinern!

Oder nicht?

marcopi
20-03-2002, 11:25
ja das soll sie ja auch,
aber ich sollte auch nach jedem durchlauf angezeigt bekommen das sich der Wert um 10 geändert hat

spinbox->setValue(spinbox_value);

stattdessen zeigt die Spinbox nur Sprünge von 50 ??

marcopi
20-03-2002, 11:31
Oha
hab gerade gemerkt das der Timer in der schleife keine Funktion hat.
Das geht so schnell das ich das nicht sehen kann. Da muß ich mir wohl was anderes überlegen.

Danke Marco

anda_skoa
20-03-2002, 18:18
Das liegt daran, dass die eventloop nicht wieder aktiv wird, weil ja noch code im slot läuft.
erst wenn der Slot beendet wird das nächste event behandelt.

Du mußt also den Wert um 10 verringern und dann den slot verlassen und somit der Eventloop die Kontrolle zurück geben.

Ciao,
_

marcopi
21-03-2002, 15:24
Hallo anda_skoa

es läuft:D
hab das jetzt so geändert das nur noch eine Anweisung pro Slot-Durchlauf bearbeitet wird.


Danke Marco