QPainterPath 对象上的动画
Animation on a QPainterPath Object
我想要显示动画箭头形状按钮。
为了绘制它,我创建了一个继承 QGraphicsObject
并使用 QPainterPath
class 的 class。
我在 QGraphicsScene
中绘制它并使用 属性 geometry
对其进行动画处理,在 MyArrow class.
中重新定义
您可以在这里找到所有代码:https://github.com/TaiZzZ/arrowAnimation
我的问题如下:
箭头动画(意味着它向右移动并返回)但在移动时保持绘制状态。你知道为什么吗?
Ps :我在使用 QState Machine 时也有同样的行为,所以我猜这个问题只来自于我画箭头的方式。
我尝试了两种不同的方法:
将贝塞尔曲线改成直线,并没有解决问题
我没有画路径,而是画了一个矩形(boundingRect()
)(所以我只改了drawPath(path)
),效果很好
所以总而言之,错误来自 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());
我想要显示动画箭头形状按钮。
为了绘制它,我创建了一个继承 QGraphicsObject
并使用 QPainterPath
class 的 class。
我在 QGraphicsScene
中绘制它并使用 属性 geometry
对其进行动画处理,在 MyArrow class.
您可以在这里找到所有代码:https://github.com/TaiZzZ/arrowAnimation
我的问题如下:
箭头动画(意味着它向右移动并返回)但在移动时保持绘制状态。你知道为什么吗?
Ps :我在使用 QState Machine 时也有同样的行为,所以我猜这个问题只来自于我画箭头的方式。
我尝试了两种不同的方法:
将贝塞尔曲线改成直线,并没有解决问题
我没有画路径,而是画了一个矩形(
boundingRect()
)(所以我只改了drawPath(path)
),效果很好
所以总而言之,错误来自 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());