Animationsgeschwindigkeit

Alles rund um die Programmierung mit Qt
Antworten
marcel87
Beiträge: 31
Registriert: 31. März 2013 20:25

Animationsgeschwindigkeit

Beitrag von marcel87 »

Hallo!

Ich bin gerade dabei einen QPushButton zu animieren, also dieser soll sich nach einem Klick zu einer Position bewegen.
Dies funktioniert soweit bei mir gut.

Hier ist der Ausschnitt aus meinem MainWindow.

Code: Alles auswählen

{   
// Zuerst wird eine neue Animation erzeugt
QPropertyAnimation*animation= new QPropertyAnimation(ui->Button, "geometry");
   
    //Hier wird eine fixe Zeit eingestellt
    animation->setDuration(5000); //ungeeignet, da die Zeit fix ist 

    // Die Endposition und die Endgröße wird hier bestimmt 
    QRect endposition(40,500,100,100);

    // An dieser Stelle wird der EndValue gesetzt und die Animation gestartet
    animation->setEndValue(endposition);
    animation->start();
}
Das Problem dabei ist, dass bei meiner Bewegung hier die Zeit fix ist (logisch, wegen Duration).
Ich möchte jedoch, dass ich eine fixe Geschwindigkeit habe, also sowas wie "setVelocity" anstelle von "setDuration".
Auf dieser Seite (http://qt-project.org/doc/qt-4.8/q3canv ... tXVelocity) bin ich erfolglos unterwegs.

Kann da jemand einen konstruktiven Tipp geben oder eben eine Seite zu solcher Problematik geben?

Allgeimeine informationen: Ich nutze Qt 5.0.1
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Animationsgeschwindigkeit

Beitrag von DBGTMaster »

Aus der Geschwindigkeit kannst du wiederrum die Zeit ausrechnen, oder?
marcel87
Beiträge: 31
Registriert: 31. März 2013 20:25

Re: Animationsgeschwindigkeit

Beitrag von marcel87 »

Hallo!

Ne, so funktioniert das nicht. Die Sache ist die: Man hat die aktuelle Position des QPushButtons und seine Endpositon. Diese Endposition kann egal wo sein, solange man z.B. 5 Sekunden der Animation für die Erreichung der Endposition gegeben hat. Das bedeutet egal wohin sich der QPushButton bewegen soll, er erreicht dies immer unter der vorgegebener Zeit (also 5s). Die Geschwendigkeit variiert dabei, abhängig von der Entfernung. Das will ich eben andersrum haben.

Ich möchte eben eine fixe Geschwindigkeit haben und die Zeit sollte je nach Entfernung variieren.
Ich glaube dies lässt sich nicht durch QPropertyAnimation umsetzen aber wie gesagt, an dieser Stelle komme ich nicht weiter.
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Animationsgeschwindigkeit

Beitrag von DBGTMaster »

Du könntest den Abstand von Startposition und Endposition errechnen, und darauf dann die Geschwindigkeit.
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Animationsgeschwindigkeit

Beitrag von veeman »

Wie schon DBGTMaster sagte kannst du die Zeit selbert berechnen, zur Vereinfachung könntest du deine eigene Klasse implementieren:
1. QPropertyAnimation ableiten
2. setDuration als protected (privat) deklarieren
3. deine setVelocity Funktion implementieren
4. start-Methode überschreiben
4. Und beim Aufruf dieser anhand des Abstandsvektors dir die Zeit setzen und anschließend die Animation starten
marcel87
Beiträge: 31
Registriert: 31. März 2013 20:25

Re: Animationsgeschwindigkeit

Beitrag von marcel87 »

Hallo!

Danke für die Antwort, ich versuche dies dann umzusetzen.
Mr.Crank
Beiträge: 38
Registriert: 16. April 2013 15:21

Re: Animationsgeschwindigkeit

Beitrag von Mr.Crank »

Ein Ansatz wäre sicher auch noch die Duration direkt im Klammerterm abhängig von der geometry zu berechnen.
Spricht du legst dir Variablen an , von mir aus int x_start=0,int x_end=0; und int y_start=0,int y_end=0; ind den
speicherst du die geometry daten der Start und Endposition. Die Differenz der von x_start zu x_end und selbiges
für y ist ein Maß für deine Entfernung.(ggf. überprüfen welcher der größere Wert ist und von dem immer subtrahieren
um negativ Werte zu vermeiden). In animation->setDuration(Festerwert * Differenzenwert), so sollte es auch einfacher
gehen. Den Differenzwert solltest du als Resultierende errechnen ( Mathe und Mechanik lässt grüßen ;P )
float dif_wert=Wurzel aus dif_x²+dif_y² ; ( so kannst du dir sogar die < > Abfrage sparen ;) )

Hoffe es hilft Dir weiter ;D
marcel87
Beiträge: 31
Registriert: 31. März 2013 20:25

Re: Animationsgeschwindigkeit

Beitrag von marcel87 »

Hallo!

Danke für die Tipps. Mathe und Mechanik ist kein Problem^^.

Das Problem liegt in der Umsetzung, nicht in der Theorie. Bei mir fängt es gerade so an zu funktionieren (wie ich es gerne haben möchte).
Antworten