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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Property animation или универсальная анимация  (Прочитано 3207 раз)
strilya
Гость
« : Июль 26, 2015, 01:08 »

Доброго времени суток.
Есть куча объектов в разных классах, которые было бы неплохо анимировать при разных внешних причинах.
Перспектива писать тысячи одинаковых строчек обрадовала не сильно, поэтому было решено сделать парочку ф-ций, реализующие данный ф-ционал:

Код:
enum Typeanim{chsize, chpos};

// Перегруженная функция анимации объекта obj, изменение координат ИЛИ размера
void Animation::animateObject(QWidget *obj, Typeanim typeanim, unsigned duration, QEasingCurve easingcurve,
    int startX, int startY, int endX, int endY)
{
    QPropertyAnimation *anim = new QPropertyAnimation(obj, "geometry");
    anim->setDuration(duration);
    anim->setEasingCurve(easingcurve);
    if(typeanim == chsize){
        QPoint pos = obj->pos();
        anim->setStartValue(QRect(pos.x(), pos.y(), startX, startY));
        anim->setEndValue(QRect(pos.x(), pos.y(), endX, endY));
    } else {
        QSize sizeobj = obj->size();
        anim->setStartValue(QRect(startX, startY, sizeobj.width(), sizeobj.height()));
        anim->setEndValue(QRect(endX, endY, sizeobj.width(), sizeobj.height()));
    }
    anim->start(QAbstractAnimation::DeleteWhenStopped);
    return;
}

Имею следующие ошибки:

Код:
no matching function for call to 'QPropertyAnimation::QPropertyAnimation(QWidget*&, const char [9])'
     QPropertyAnimation *anim = new QPropertyAnimation(obj, "geometry");

variable 'QSize sizeobj' has initializer but incomplete type
     QSize sizeobj = obj->size();

invalid use of incomplete type 'class QWidget'
     QSize sizeobj = obj->size();

invalid use of incomplete type 'class QRect'
     anim->setStartValue(QRect(startXpos, startYpos, sizeobj.width(), sizeobj.height()));

Прошу помощи, ибо ошибки кажутся простейшими, но тем не менее, я не очень могу понять, в чем я не прав.
Записан
BuRn
Гость
« Ответ #1 : Июль 26, 2015, 02:58 »

Qt 5.5 Взял ваш пример, у меня нет ошибок компиляции. Приведите полностью код класса Animation. Надеюсь вы подключили
Код:
#include <QPropertyAnimation>
Записан
strilya
Гость
« Ответ #2 : Июль 26, 2015, 03:27 »

Qt 5.5, mingw

Animatioh.h

Код:
#ifndef ANIMATION_H
#define ANIMATION_H

#include <QObject>
#include <QPropertyAnimation>

enum Typeanim{chsize, chpos};

class Animation : public QObject
{
    Q_OBJECT

    public:
        explicit Animation(QObject *parent = 0);

    protected:
        // Перегруженная функция анимации объекта obj, изменение координат
        void animateObject(QWidget *obj, unsigned duration, QEasingCurve typeanim,
            int startXpos, int startYpos, int endXpos, int endYpos);

        // Перегруженная функция анимации объекта obj, изменение координат и размера
        void animateObject(QWidget *obj, unsigned duration, QEasingCurve typeanim,
            int startXpos, int startYpos, int endXpos, int endYpos, int startXsize, int startYsize,
            int endXsize, int endYsize);
};

#endif // ANIMATION_H


Animation.cpp

Код:
#include "animation.h"

// Конструктор
Animation::Animation(QObject *parent) : QObject(parent){

}

// Перегруженная функция анимации объекта obj, изменение координат ИЛИ размера
void Animation::animateObject(QWidget *obj, Typeanim typeanim, unsigned duration, QEasingCurve easingcurve,
    int startX, int startY, int endX, int endY)
{
    QPropertyAnimation *anim = new QPropertyAnimation(obj, "geometry");
    anim->setDuration(duration);
    anim->setEasingCurve(easingcurve);
    if(typeanim == chsize){
        QPoint pos = obj->pos();
        anim->setStartValue(QRect(pos.x(), pos.y(), startX, startY));
        anim->setEndValue(QRect(pos.x(), pos.y(), endX, endY));
    } else {
        QSize sizeobj = obj->size();
        anim->setStartValue(QRect(startX, startY, sizeobj.width(), sizeobj.height()));
        anim->setEndValue(QRect(endX, endY, sizeobj.width(), sizeobj.height()));
    }
    anim->start(QAbstractAnimation::DeleteWhenStopped);
    return;
}

// Перегруженная функция анимации объекта obj, изменение координат И размера
void Animation::animateObject(QWidget *obj, unsigned duration, QEasingCurve easingcurve, int startXpos,
    int startYpos, int endXpos, int endYpos, int startXsize, int startYsize, int endXsize, int endYsize)
{
    QPropertyAnimation *anim = new QPropertyAnimation(obj, "geometry");
    anim->setDuration(duration);
    anim->setEasingCurve(easingcurve);
    anim->setStartValue(QRect(startXpos, startYpos, startXsize, startYsize));
    anim->setEndValue(QRect(endXpos, endYpos, endXsize, endYsize));
    anim->start(QAbstractAnimation::DeleteWhenStopped);
    return;
}
« Последнее редактирование: Июль 26, 2015, 03:29 от strilya » Записан
BuRn
Гость
« Ответ #3 : Июль 26, 2015, 13:52 »

Смотрите внимательнее:
Прототип в h файле
Код:
void animateObject(QWidget *obj, unsigned duration, QEasingCurve typeanim,
            int startXpos, int startYpos, int endXpos, int endYpos);
Реализация
Код:
Animation::animateObject(QWidget *obj, Typeanim typeanim, unsigned duration, QEasingCurve easingcurve,
    int startX, int startY, int endX, int endY)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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