Russian Qt Forum
Ноябрь 23, 2024, 19:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPropertyAnimation виджет не двигается  (Прочитано 2362 раз)
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();
}
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Февраль 25, 2018, 16:17 »

Потому что вы создаете анимацию на стеке и она разрушается при выходе из метода right.
Записан
wildnothing
Гость
« Ответ #2 : Февраль 25, 2018, 16:23 »

Потому что вы создаете анимацию на стеке и она разрушается при выходе из метода right.
Разве порядок выполнения не такой:
1) заходим в функцию
2) создается локальная переменная анимации
3) анимация выполняется, координата label меняется
4) выход из функции, анимация удаляется, а координаты label остаются измененными?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Февраль 25, 2018, 16:25 »

Нет.
В методе анимация только запускается, а выполняться она будет асинхронно по таймеру.
Записан
wildnothing
Гость
« Ответ #4 : Февраль 25, 2018, 16:29 »

Нет.
В методе анимация только запускается, а выполняться она будет асинхронно по таймеру.
Спасибо, я все исправила и все заработало!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.