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

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

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

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

我的问题如下:

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

附言:我使用QState Machine时具有相同的行为,所以我猜问题仅出自我绘制箭头的方式。

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


将贝塞尔曲线更改为直线,并不能解决问题。
我没有画路径,而是画了一个矩形(boundingRect())(所以我只更改了drawPath(path)),它可以工作


综上所述,该错误来自QPainterPath ...但是为什么呢?

编辑:

这是用来说明我的问题的图片:

c++ - QPainterPath对象上的动画-LMLPHP
c++ - QPainterPath对象上的动画-LMLPHP

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

最佳答案

问题实际上很简单-您在重用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());

关于c++ - QPainterPath对象上的动画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44796718/

10-09 06:34