Seite 1 von 1

[solved] Vorgehensweise bei animierten Widgets

Verfasst: 27. Mai 2009 09:19
von Raien
Hi,

wollte demnächst mal ein Widget schreiben, das so ähnlich aussieht wie die Progressbar von Windows Vista/7. Also das in einem bestimmten Intervall so ein "Lichtbogen" (ich denke ihr wisst was ich meint =)) durch den Fortschrittsbalken läuft.
Normalerweise würde man das dann ja mit einem Timer realisieren der die Paint-Aktionen anstößt (nehm ich zumindest mal an).
Allerdings ist mir dabei nicht ganz wohl, da ich irgendwie das Gefühl nicht loswerde, dass ein Timer zu "teuer" dafür ist. (Beispielszenario: Liste mit mehreren Downloads die mit 20 oder mehr Progressbars dargestellt werden --> 20 Timer --> Verschwendung?? ;))

Wie würdet ihr soetwas lösen?

Danke schon mal für die Anregungen....

Gruß
Raien

Verfasst: 27. Mai 2009 09:25
von RavenIV
Bevor ich so etwas selber programmiere und einige Tage darauf verwende, würde ich 30 Minuten in google investieren und einfach mal suchen, ob nicht schon jemand anderst sowas gemacht hat.

Verfasst: 27. Mai 2009 16:49
von Raien
Ich schreibe das Widget ja nicht aus Notwendigkeit, sondern möchte einfach verstehen wie solche Dinge entwickelt werden. Das Animationen mit Timer realisiert werden kann ich ja in den QtDemos auch sehen.
Wollte einfach nur mal wissen ob da jemand andre Möglichkeiten als Timer kennt oder schon benutzt hat.

Verfasst: 28. Mai 2009 11:44
von vii2us
würde mich auch mal interessieren.
Ich habe mal versucht eine Animation mit einem QTimer zu basteln, das ganze lief auf dem Handy überhaupt nicht ruckelfrei! Kennt da jemand andere Methoden?

Verfasst: 28. Mai 2009 12:02
von franzf
Das menschliche Auge kann wohl 24 Bilder/sec auflösen.
1000msec/24 = 41,6666... ~42 msec. Das ist das optimale Intervall für den Timer.
Bei längerem Intervall registriert man Brüche in der Animation, bei kürzerem bringts net wirklich was, höchstens mehr Auslastung für den Prozessor, daher vllt. das "Hakelige" auf dem Handy.

Verfasst: 28. Mai 2009 12:08
von vii2us
nein das Handy braucht einfach zu lange für die Paintfunktion glaube ich.
Auf einem Rechner läuft es ruckelfrei...aber halt nicht auf dem handy :(
naja..

Verfasst: 29. Mai 2009 06:53
von Raien
@franzf: Wie würdest du so etwas umsetzen? Pro Widget ein Timer? Wie gesagt ich habe dabei so ein Gefühl, dass ich zuviele Systemressourcen beanspruche.....

Verfasst: 29. Mai 2009 08:32
von franzf
Wenn es immer die selben Timer-Intervalle sind dann spricht absolut nichts gegen einen einzigen Timer, den sich alle teilen.

Wenn du aber verschiedene Intervalle brauchst, kannst du auch nicht immer den gleichen Timer verwenden.
In dem Fall würde ich eine Klasse schreiben, die die Timer in einer QMap/QHash speichert, der Key ist das Intervall in msec. Bei ner Anfrage schaust du erst im Container nach, ob für den Wert ein Timer existiert, wenn ja wird der zurückgegeben. Wenn nein erstellst du nen neuen und fügst ihn ein.

Verfasst: 29. Mai 2009 09:14
von Raien
Stimmt hört sich gut an. Denke das kann man mit einem einzigen Timer tun der eben ca. 24 fps (die Zahl fiel hier im Forum irgendwo mal) erzeugt. Wenn die "Lichtbögen" sich unterschiedlich schnell bewegen sollen dann gibts halt nochn float pro Instanz die den Bewegungsfaktor darstellt. Muss halt irgendwo mitgezählt werden (statische Klassenvariable) wieviele Instanzen gerade aktiv sind, sodass der Timer nicht unnötig feuert wenn garnichts gezeichnet werden müsste.
Perfekto ;)

Danke franzf