Qt 在鼠标单击QML时重复状态

Qt 在鼠标单击QML时重复状态,qt,qml,qtquick2,Qt,Qml,Qtquick2,在代码中,我定义了一个状态、一个转换和一个旋转动作 属性更改发生后,即旋转设置为360后,onClicked处理程序将变为静音,并且在随后的MouseArea单击后,将不再播放动画 这是我目前的代码: Image{ id: logo x: 29 source: "LSFO-IngeniiSymbol.png" width: 70 height: 70 states: State { name: "rotated" ; when: a

在代码中,我定义了一个
状态
、一个
转换
和一个
旋转动作

属性更改发生后,即
旋转
设置为
360
后,
onClicked
处理程序将变为静音,并且在随后的
MouseArea
单击后,将不再播放动画

这是我目前的代码:

Image{
    id: logo
    x: 29
    source: "LSFO-IngeniiSymbol.png"
    width: 70
    height: 70
    states: State {
        name: "rotated" ; when: area.pressed
        PropertyChanges {target: logo; rotation: 360 }

    }

    transitions: Transition {
        RotationAnimation { 
            id: rotateanimate
            duration: 1000
            direction: RotationAnimation.Clockwise
        }
    }

    MouseArea {
        id: area
        anchors.fill: parent 
        onClicked: {
            logo.state = "rotated"
           // pageloader.source = "HelpDoc.qml"
           // pageloader.source = ""
           // pageloader.source = "HelpDoc.qml"
        } 
    }
}    

State
s是表示给定
项的不同属性配置的一种方式。每个
状态
都有其在特定
中定义的属性的唯一值集

Transition
s是一种在当前
状态更改为另一
状态时向
项目添加动画的方法。它们可以以“受限方式”应用,即仅当
从一个特定的
状态
更改为另一个状态时(请参见和属性),或者它们可以“全局”应用于每个
状态
更改。在任何情况下都需要改变

在您的代码中,
状态
设置为
旋转
,然后重新分配相同的
状态
,以便不再发生任何更改。因此,没有空间进行另一次
转换
,或者转换到
旋转
状态
,或者转换到名为
状态的默认空状态

无论如何,应用动画有多种方法,包括但不限于、
Transition
s和。在我看来,后者是解决这一具体案件的方法。以下是重新访问的代码版本,其中的动画在鼠标单击时触发:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1

ApplicationWindow {
    width: 250
    height: 250
    visible: true

    Image{
        id: logo
        anchors.centerIn: parent
        source: "https://yt3.ggpht.com/-YiF6y9OXDQ8/AAAAAAAAAAI/AAAAAAAAAAA/oFNmJLmzqDA/s100-c-k-no/photo.jpg"
        width: 100
        height: 100

        RotationAnimation {
            id: rotate
            target:logo
            property: "rotation"
            from: 0
            to: 360
            duration: 1000
            direction: RotationAnimation.Clockwise
        }


        MouseArea {
            id: area
            anchors.fill: parent
            onClicked: {
                rotate.start()   // animation plays here!
                // your code
            }
        }
    }
}

你解决了我的问题,谢谢。我是从QT自己的例子出发的,所以这让我有点误入歧途。谢谢你的知识