使用QPropertyAnimation动画QRect

时间:2013-11-01 17:45:51

标签: qt animation qrect

我在QGraphicsScene中有一堆QRects和一些文本,我试图使用QPropertyAnimation进行动画处理。动画文本工作正常,但QRects不起作用,因为它们无法转换为QGraphicsObject

这完美无缺

QPropertyAnimation *a = new QPropertyAnimation(this);
a->setTargetObject(items[size.x()*size.y()-1-aa]->toGraphicsObject()); //text
a->setPropertyName("pos");
a->setDuration(animationLength);
a->setStartValue(items[size.x()*size.y()-1-aa]->pos());
a->setEndValue(newTextPos);
a->setEasingCurve(easingCurve);
a->start(QAbstractAnimation::DeleteWhenStopped);

但是没有,因为items [2 * size.x()* size.y() - 2-aa] - > toGraphicsObject()返回一个空指针。

QPropertyAnimation *a = new QPropertyAnimation(this);
a->setTargetObject(items[2*size.x()*size.y()-2-aa]->toGraphicsObject()); //rect
a->setPropertyName("pos");
a->setDuration(animationLength);
a->setStartValue(items[2*size.x()*size.y()-2-aa]->pos());
a->setEndValue(newRectPos);
a->setEasingCurve(easingCurve);
a->start(QAbstractAnimation::DeleteWhenStopped);

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

toGraphicsObject返回空指针,因为QGraphicsRectItem不是QGraphicsObject。您无法使用QGraphicsRectItem执行动画。我可以建议两个解决方法:

  1. 创建自己的类,派生自QObjectQGraphicsRectItem,创建“pos”属性并实现其getter和setter。查看示例here
  2. 创建自己的QGraphicsObject派生类。实现其boundingRectpaint纯虚方法,使其绘制矩形。