QPainterPath 对象上的动画

Animation on a QPainterPath Object

我想要显示动画箭头形状按钮。

为了绘制它,我创建了一个继承 QGraphicsObject 并使用 QPainterPath class 的 class。

我在 QGraphicsScene 中绘制它并使用 属性 geometry 对其进行动画处理,在 MyArrow class.

中重新定义

您可以在这里找到所有代码:https://github.com/TaiZzZ/arrowAnimation

我的问题如下:

箭头动画(意味着它向右移动并返回)但在移动时保持绘制状态。你知道为什么吗?

Ps :我在使用 QState Machine 时也有同样的行为,所以我猜这个问题只来自于我画箭头的方式。

我尝试了两种不同的方法:

所以总而言之,错误来自 QPainterPath ... 但是为什么?

编辑:

这里有图片来说明我的问题:

请注意,它不再抗锯齿...

问题其实很简单——您在重新使用之前没有清除 QPainterPath

您的 Arrow class 有一个成员...

QPainterPath arrow;

并且您的 Arrow::paint 实施开始于...

arrow.moveTo(rect.right(),rect.center().y());
arrow.lineTo(rect.left(),rect.top());

因此,每次调用 Arrow::paint 时,都会向 QPainterPath 添加 另一个 新子路径。因此,在任何给定时间,您看到的都是累积的路径。最简单的解决方案是删除 arrow 成员变量并使用局部范围的 QPainterPath...

QPainterPath arrow;
arrow.moveTo(rect.right(),rect.center().y());
arrow.lineTo(rect.left(),rect.top());