我想显示一个动画的箭头形状按钮。
为了进行绘制,我创建了一个继承QGraphicsObject
的类并使用QPainterPath
类。
我将其绘制在QGraphicsScene
中,并使用在MyArrow类中重新定义的属性geometry
对其进行动画处理。
您可以在这里找到所有代码:https://github.com/TaiZzZ/arrowAnimation
我的问题如下:
箭头动画(意味着它向右移动并返回),但在移动时保持绘制状态。你知道为什么吗?
附言:我使用QState Machine时具有相同的行为,所以我猜问题仅出自我绘制箭头的方式。
我尝试了两种不同的方法:
将贝塞尔曲线更改为直线,并不能解决问题。
我没有画路径,而是画了一个矩形(boundingRect()
)(所以我只更改了drawPath(path)
),它可以工作
综上所述,该错误来自QPainterPath ...但是为什么呢?
编辑:
这是用来说明我的问题的图片:
请注意,它不再抗锯齿...
最佳答案
问题实际上很简单-您在重用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/