gpt4 book ai didi

c++ - QPainterPath 对象上的动画

转载 作者:行者123 更新时间:2023-11-28 01:46:35 26 4
gpt4 key购买 nike

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

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

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

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

我的问题如下:

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

注意:我使用 QState Machine 时有相同的行为,所以我猜这个问题只是出在我画箭头的方式上。

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

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

  • 我没有绘制路径,而是绘制了一个矩形(boundingRect())(所以我只更改了drawPath(path)),它起作用了

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

编辑:

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

Before the animation After the animation

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

最佳答案

问题实际上非常简单——您在重新使用它之前没有清除您的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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com