You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt Quick编写的Rectangle动画运行异常相关问题求助

问题1解答

你当前用State的when条件绑定mouseArea.pressed实现宽度累加的逻辑有本质问题:

  • State的切换仅在when对应的布尔值发生变化时触发1次,也就是只有「按下鼠标」和「松开鼠标」两个时间点会触发状态切换,按住鼠标不动的过程中不会反复触发状态切换。
  • PropertyChanges里的rect.width + 100是状态切换的瞬间计算取值,仅计算1次,不会在按住过程中重复计算,自然无法实现每次加100的效果。

如果要实现按住鼠标持续累加宽度,建议放弃用State实现,改为监听MouseArea的pressAndHold信号,配合Timer定时器,按住期间每隔固定间隔修改一次宽度即可。

问题2解答

这是因为你没有给NumberAnimation明确指定作用的目标和属性:

  • 你当前写的通用NumberAnimation没有指定target和property参数,QtQuick的动画匹配逻辑无法准确将它和width的属性变化绑定,优先直接应用了PropertyChanges里的固定值,就出现了宽度瞬间变化的情况。

修改方法很简单,给NumberAnimation明确指定作用对象即可:

NumberAnimation { target: rect; property: "width"; duration: 1000 }

问题3解答

有两个原因共同导致旋转角度不符合预期:

  1. 你固定写了目标旋转值rotation: 720,而不是在当前旋转值的基础上累加720,第一次按下从0转到720,松开回到默认状态(rotation为0)时,因为你的Transition没有指定to:限制,默认是双向生效的,返回默认状态也会走旋转动画,相当于每次按下+松开就会转4圈,反复快速点击的话动画未结束就触发下一次切换,就会出现总旋转角度超过720的情况。
  2. RotationAnimation默认的direction属性值是RotationAnimation.Shortest,会自动选择最短路径旋转,当起始值和目标值差值为360的整数倍时,旋转方向和圈数计算会不符合预期。

解决方法:

  • 把PropertyChanges里的旋转值改为累加:rotation: rect.rotation + 720
  • 给RotationAnimation指定顺时针旋转:RotationAnimation { duration: 1000; direction: RotationAnimation.Clockwise }
  • 如果只需要按下的时候触发旋转动画,给Transition加上to: "A"限制,让它仅在进入A状态时生效,松开返回默认状态不触发动画。

内容的提问来源于stack exchange,提问作者jett chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:39:04