Russian Qt Forum

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



Название: QPropertyAnimation виджет не двигается
Отправлено: wildnothing от Февраль 25, 2018, 16:14
Я хочу переместить виджет label (начальное положение 160, 100, 100, 37). Но он не движется. В чем моя ошибка?

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QList>
#include <QLabel>
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
    void right();
private:
    Ui::MainWindow *ui;
};
 
#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::right()
{
    if(ui->boat->x() != 360){
        QPropertyAnimation animation(ui->boat, "geometry");
        animation.setDuration(10000);
        animation.setEasingCurve(QEasingCurve::Linear);
        animation.setStartValue(ui->boat->geometry());
        animation.setEndValue(QRect(360, 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.right();
    return a.exec();
}


Название: Re: QPropertyAnimation виджет не двигается
Отправлено: Old от Февраль 25, 2018, 16:17
Потому что вы создаете анимацию на стеке и она разрушается при выходе из метода right.


Название: Re: QPropertyAnimation виджет не двигается
Отправлено: wildnothing от Февраль 25, 2018, 16:23
Потому что вы создаете анимацию на стеке и она разрушается при выходе из метода right.
Разве порядок выполнения не такой:
1) заходим в функцию
2) создается локальная переменная анимации
3) анимация выполняется, координата label меняется
4) выход из функции, анимация удаляется, а координаты label остаются измененными?


Название: Re: QPropertyAnimation виджет не двигается
Отправлено: Old от Февраль 25, 2018, 16:25
Нет.
В методе анимация только запускается, а выполняться она будет асинхронно по таймеру.


Название: Re: QPropertyAnimation виджет не двигается
Отправлено: wildnothing от Февраль 25, 2018, 16:29
Нет.
В методе анимация только запускается, а выполняться она будет асинхронно по таймеру.
Спасибо, я все исправила и все заработало!