Problem: Following is a qt qml program. I am using qt6 version. on repeated mouse clicks, program starts behaving incorrectly. The rotation on each start after mouse is clicked, goes on with reduced speed. What is causing bug in this code, which seems perfect to me.
Following is a qt qml program. I am using qt6 version. on repeated mouse clicks, program starts behaving incorrectly. The rotation on each start after mouse is clicked, goes on with reduced speed. What is causing bug in this code, which seems perfect to me.
import QtQuick
Window {
width: Screen.width
height: Screen.height
visible: true
title: qsTr("Firki")
property int globalFrom: 0
Image {
anchors.fill: parent
source: "qrc:/images/background.png"
Image {
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
height: parent.height / 2
source: "qrc:/images/pole.png"
}
Image {
id: firki
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "qrc:/images/pinwheel.png"
RotationAnimation on rotation {
id: rotatefirki
loops: rotateblurredfirki.loops
duration: rotateblurredfirki.duration
from: rotateblurredfirki.from
to: rotateblurredfirki.to
running: rotateblurredfirki.running
}
}
Image {
id: blurredfirki
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "qrc:/images/blur.png"
opacity: 0
RotationAnimation on rotation {
id: rotateblurredfirki
loops: Animation.Infinite
duration: 1000
from: globalFrom
to: 360
running: false
}
}
}
MouseArea {
anchors.fill: parent
onClicked: {
if(!rotateblurredfirki.running)
{
rotateblurredfirki.restart()
blurredfirki.opacity = 1
}
else
{
rotateblurredfirki.stop()
globalFrom = Math.floor(blurredfirki.rotation)
blurredfirki.opacity = 0
}
}
}
}
I think the paused property will be useful to you here. First bind rotatefirki's paused property to rotateblurredfirki's.
RotationAnimation on rotation {
id: rotatefirki
...
paused: rotateblurredfirki.paused
}
Then change your mouse click handler to toggle the paused the property:
MouseArea {
anchors.fill: parent
onClicked: {
if(!rotateblurredfirki.running)
{
// Not running, so start the animation
rotateblurredfirki.restart()
}
else
{
// Keep it running, but pause it
rotateblurredfirki.paused = !rotateblurredfirki.paused
blurredfirki.opacity = 1 - blurredfirki.opacity
}
}
}