动画和自定义属性

lo

我正在尝试在下面的代码中对图形对象进行动画处理。如果第二个动画未注释,则这两个动画均起作用。第二(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);
}
通用汽车

当你说...

第一个动画(a1)不能单独运行

你到底什么意思?您是说您已经使用调试器逐步执行了代码,而没有调用set_radius?或者仅仅是您的AItem屏幕没有更改?我怀疑是后者,在这种情况下,您需要QGraphicsItem::updateset_radius实现中添加一个调用...

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

两种动画可以一起工作,因为第二种动画将被调用QGraphicsItem::setPos,这将自动触发所需的更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章