0

我在一个 QGraphicsScene 中有一堆 QRects 和一些文本,我试图用 QPropertyAnimation 对其进行动画处理。为文本设置动画效果很好,但 QRect 不起作用,因为它们无法转换为 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);

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

4

1 回答 1

1

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

  1. 创建您自己的派生自QObjectand的类QGraphicsRectItem,创建“pos”属性并实现它的 getter 和 setter。请参阅此处的示例。
  2. 创建您自己的派生自QGraphicsObject. 实现它的boundingRectpaint纯虚方法,使它绘制一个矩形。
于 2013-11-02T12:27:08.920 回答