2016-09-11 66 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在屏幕上沒有改變?我懷疑這是在這種情況下,你需要一個電話你set_radius實現增加QGraphicsItem::update後者...

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

兩個動畫一起工作,因爲第二個將調用QGraphicsItem::setPos將自動觸發所需的更新。

+0

聖盃。你是對的,我忘了更新項目。 – qloq