QSlider mit QPropertyAnimation connecten?

Verschiedenes zu Qt
Antworten
Himbeer-Toni
Beiträge: 11
Registriert: 7. Juni 2010 07:49

QSlider mit QPropertyAnimation connecten?

Beitrag von Himbeer-Toni »

Hallo liebe Foren-Community,

mein Animationsprojekt schreitet voran und inzwischen laufen alle Animationen so, wie ich es gerne hätte. Es wäre allerdings schön, wenn ich den zeitlichen Fortschritt meiner Animation mit einem QSlider als Zeitleiste visualisieren könnte. Außerdem wäre es toll, wenn man mit Bewegen des Sliders die Animation vor- und zurückspulen könnte.

Die Animationen laufen bereits und können bisher über einen Start-, Stop- und Pausebutton gesteuert werden. Ein Slider ist auch schon vorhanden, jedoch bisher leider ohne Funktion, da mir einfach nicht klar ist, wie ich das ganze connecten soll. Der Slider nimmt nur Zahlen von 0 bis 100 (int) an, während der Animationsfortschritt meines Wissens nach Werte zwischen 0 und 1 annimmt.

Hier ein verknapptes Beispiel:

Code: Alles auswählen

QScene Scene;
Scene.addItem(Ball);

QGraphicsView View(&Scene);

QPropertyAnimation AniPosition(Ball, "pos");
AniPosition.setDuration(5000);
AniPosition.setStartValue(QPointF(0,0));
AniPosition.setEndValue(QPointF(200,200));

QSlider SlideBar = new QSlider(Qt::Horizontal, this);
Nun stellt sich mir die Frage nach den Connections:

Code: Alles auswählen

connect(&AniPosition, SIGNAL(?), SlideBar, SLOT(?));
connect(SlideBar, SIGNAL(?), &AniPosition, SLOT(?));
Bin ich überhaupt auf dem richtigen Weg? Für Hilfe, Tipps und Anregungen bin ich dankbar.

Einen schönen Sonntag!

Viele Grüße
Toni
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

vielleicht
- das valueChanged-signal der QPropertyAnimation mit einem eigenen slot connecten
- da dann das QSlider-value setzen (QVariant::toInt()) (in prozent umrechnen, oder QSlider minimum/maximum auf 0/1 setzen?)

- andersrum dann das valueChanged-signal vom QSlider mit einem eigenen slot verbingen, da mittels QPropertyAnimation::totalDuration() ausrechnen, an welchen zeitpunkt der animation beim gegebenen prozentwert (vom QSlider) gesprungen werden muss, und mittels QPropertyAnimation::setCurrentTime das dann auch tun
?

nur geraten, habs nie selbst gemacht, aber so wurde ich spontan, nach doku, es probieren.

mfg,
julian
Himbeer-Toni
Beiträge: 11
Registriert: 7. Juni 2010 07:49

Beitrag von Himbeer-Toni »

Ganz so einfach war es leider nicht, da das QVariant Signal vom Typ QPointF war, und somit keinen echten Bezug zur Zeit hatte. Trotzdem hab ichs lösen können, auch wenns vielleicht nicht der korrekte Weg ist :)

Code: Alles auswählen

connect(Scene.AniScaling, SIGNAL(valueChanged(QVariant)), this, SLOT(MoveSlider(QVariant)));
connect(SlideBar, SIGNAL(sliderMoved(int)), this, SLOT(MoveAnimation(int)));

void MainWindow::MoveSlider(QVariant Signal) {

    int SlideValue = (Scene.AniScaling->currentTime() * 100 / Scene.AniScaling->duration())%100;

    SlideBar->setValue(SlideValue);
}

void MainWindow::MoveAnimation(int Signal) {
    int Time = Scene.AniScaling->duration() / 100 * Signal;

    Scene.AniScaling->setCurrentTime(Time);
}
Danke für deinen Gedankenanstoß!
Antworten