| 
 Название: Property animation или универсальная анимация
 Отправлено: 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()));
 
Прошу помощи, ибо ошибки кажутся простейшими, но тем не менее, я не очень могу понять, в чем я не прав.
 Название: Re: Property animation или универсальная анимация
 Отправлено: BuRn от Июля 26, 2015,  02:58
 
 Qt 5.5 Взял ваш пример, у меня нет ошибок компиляции. Приведите полностью код класса Animation. Надеюсь вы подключили  #include <QPropertyAnimation>
 Название: Re: Property animation или универсальная анимация
 Отправлено: strilya от Июля 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;
 }
 
 Название: Re: Property animation или универсальная анимация
 Отправлено: BuRn от Июля 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)
 
 |