本来打算在Graphics View Framework框架下实现移动一个GraphicsItemGroup(从QObject与QGraphicItemGroup派生) 的时候坐标的变化有一个过渡的效果,而不是直接变化..思路本来很简单,但是不想却出现了意料之外的事情.
原本思路就是重载GraphicsItemGroup 的mouseMoveEvent, 然后在mouseMoveEvent中加入对QGraphicsItemGroup 坐标的一个动态差值.代码如下
但是在移动的时候我所料想的效果没有出现, 取而代之的是在输出栏有如下输出void GraphicsItermGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { int x = event->scenePos().x(); int y = event->scenePos().y(); QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "pos"); pAnimation->setEasingCurve(QEasingCurve::OutBounce); pAnimation->setDuration(250); pAnimation->setStartValue(this->pos()); pAnimation->setEndValue(QPointF(x,y)); pAnimation->start(QAbstractAnimation::DeleteWhenStopped); }
QPropertyAnimation: you're trying to animate a non-existing property pos of your QObject
似乎是在说pos这个属性不存在....但是查看QGraphicItem的源码的时候发现pos属性被定义在QGraphicObject里面
class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{
Q_OBJECT
...
Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)...
}
而QGraphicItemGroup是从QGraphicItem派生的.而QGraphicItem中并未见有类似pos的属性的声明.
自此个人推断QGraphicItemGroup是没有pos属性的, 要实现pos的动画需要自己声明一个pos属性.