[solved] Vorgehensweise bei animierten Widgets

Alles rund um die Programmierung mit Qt
Antworten
Raien
Beiträge: 17
Registriert: 19. März 2009 12:45

[solved] Vorgehensweise bei animierten Widgets

Beitrag 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
Zuletzt geändert von Raien am 29. Mai 2009 09:15, insgesamt 1-mal geändert.
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag 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.
Linux, das längste Text-Adventure aller Zeiten
Raien
Beiträge: 17
Registriert: 19. März 2009 12:45

Beitrag 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.
vii2us
Beiträge: 13
Registriert: 7. Mai 2009 10:25

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
vii2us
Beiträge: 13
Registriert: 7. Mai 2009 10:25

Beitrag 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..
Raien
Beiträge: 17
Registriert: 19. März 2009 12:45

Beitrag 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.....
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Raien
Beiträge: 17
Registriert: 19. März 2009 12:45

Beitrag 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
Antworten