Russian Qt Forum

Qt => Вопросы новичков => Тема начата: wildnothing от Февраль 25, 2018, 17:05



Название: Как осуществить последовательное выполнение анимаций?
Отправлено: wildnothing от Февраль 25, 2018, 17:05
Я хочу передвинуть виджет сначала влево, а потом вправо. Как это осуществить ? Я  пытаюсь организовать это таким образом(см. код), но у меня получается движение только влево.

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QList>
#include <QLabel>
#include <QPropertyAnimation>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void moveBoat(char c);
   
private:
    Ui::MainWindow *ui;
 QPropertyAnimation* animation;
};

#endif // MAINWINDOW_H

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QHBoxLayout"
#include <QPropertyAnimation>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    srand( time(0) );
    ui->setupUi(this);

QPixmap boat("C:/qtProjects/lab1_tixv/boat.png");
ui->boat->setPixmap(boat);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::moveBoat(char c)
{
    int x;
    if (c == 'r') x = 360;
    else x = 120;

    animation = new QPropertyAnimation(ui->boat, "geometry");
    animation->setDuration(3000);
    animation->setEasingCurve(QEasingCurve::Linear);
    animation->setStartValue(ui->boat->geometry());
    animation->setEndValue(QRect(x, 100, 100, 37));
    animation->start();
}

Код:
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
w.moveBoat('r'); //подвинуть вправо

w.moveBoat('l'); //подвинуть влево
    return a.exec();
}