2016-09-11 6 views
0

아래 코드에서 그래픽 개체에 애니메이션을 적용하려고합니다. 두 번째 애니메이션이 주석 처리되지 않은 경우 두 애니메이션이 모두 작동합니다. 또한 두 번째 (a2) 애니메이션은 단독으로 작동하지만 첫 번째 애니메이션 (a1)은 단독으로 작동하지 않습니다. 문제가 어디에 있습니까?애니메이션 및 사용자 지정 속성

// aitem.h 
#ifndef AITEM_H 
#define AITEM_H 

#include <QObject> 
#include <QGraphicsItem> 
#include <QGraphicsObject> 
#include <QPainter> 
#include <QPropertyAnimation> 

class AItem : public QGraphicsObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(qreal radius READ radius WRITE setRadius) 

public: 
    AItem(QGraphicsItem *parent = 0); 
    ~AItem(); 

    qreal radius() const { return m_radius; } 
    void setRadius (qreal r) { m_radius = r; } 

    QRectF boundingRect() const; 
    void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 

private: 
    QPropertyAnimation* a1; 
    QPropertyAnimation* a2; 
    qreal m_radius; 

}; 

#endif // AITEM_H 

// aitem.cpp 
#include "aitem.h" 

AItem::AItem(QGraphicsItem *parent): QGraphicsObject(parent), m_radius(10) 
{ 
    a1 = new QPropertyAnimation (this, "radius"); 
    a1->setDuration(5000); 
    a1->setStartValue(10); 
    a1->setEndValue(150); 
    a1->start(); 

    /* 
    a2 = new QPropertyAnimation (this, "pos"); 
    a2->setDuration(5000); 
    a2->setStartValue(QPointF(0, 0)); 
    a2->setEndValue(QPointF(300, 300)); 
    a2->start(); 
    */ 
} 

AItem::~AItem() 
{ 
} 

QRectF AItem::boundingRect() const 
{ 
    return QRectF (0, 0, m_radius, m_radius); 
} 

void AItem::paint(QPainter *painter, const QStyleOptionGraphicsItem  *option, QWidget *widget) 
{ 
    painter->drawRect(0, 0, m_radius, m_radius); 
} 

답변

0

말 ...

최초의 애니메이션 (A1) 혼자 작동하지 않습니다

정확히 무엇을 의미합니까? 디버거를 사용하여 코드를 단계적으로 수행하고 set_radius가 호출되지 않았 음을 의미합니까? 아니면 단순히 AItem이 화면에서 변경되지 않았습니까? 나는 두 번째는 자동으로 필요한 갱신을 트리거 QGraphicsItem::setPos를 호출하기 때문에

void AItem::setRadius (qreal r) 
{ 
    m_radius = r; 
    update(); 
} 

두 애니메이션이 함께 작동 ... 그것은 당신이 당신의 set_radius 구현 QGraphicsItem::update에 호출을 추가해야하는 경우에 후자의 생각한다.

+0

성배. 네가 맞다. 나는 아이템을 업데이트하는 것을 잊었다. – qloq

관련 문제