0

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

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

我将它绘制在 a 中QGraphicsScene并使用geometry在 MyArrow 类中重新定义的属性对其进行动画处理。

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

我的问题如下:

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

Ps:我使用QState Machine有相同的行为,所以我猜这个问题仅来自我绘制箭头的方式。

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

  • 将贝塞尔曲线更改为直线,并不能解决问题。

  • 我没有画路径,而是画了一个矩形(the boundingRect())(所以我只改变了drawPath(path)),它可以工作

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

编辑 :

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

动画之前 动画结束后

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

4

1 回答 1

2

QPainterPath这个问题实际上很简单——在重用它之前你没有清除它。

你的Arrow班级有一个成员...

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());
于 2017-06-29T09:49:18.613 回答