为什么动画在QML中不起作用?

时间:2017-01-06 08:00:38

标签: c++ qt qml

我想在我的一个屏幕上设置我的全屏应用,所以我必须设置它的高度,宽度,x,y等。但是我发现动画不起作用。

我曾经想过这是由于我将它设置在一个目标屏幕上,所以我创建了一个测试代码,这里我硬编码x,y,但动画仍然不起作用,有人可以告诉我为什么吗?

我的测试代码如下:

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
    visible: true
    title: qsTr("Hello World")
    flags: Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint
    opacity: 0.6
    id: root

    MouseArea {
        anchors.fill: parent
        onClicked: {
            //Qt.quit();
        }
    }

    Component.onCompleted: {
        root.x = 0;
        root.y = 0;
        root.width = Screen.width;
        root.height = Screen.height;
        initWindow.start();
    }

    PropertyAnimation {
        id: initWindow
        target: root
        from: 0
        to: Screen.height
        duration: 2000
        easing.type: Easing.InOutQuad
        onRunningChanged: {
            if(!initWindow.running && root.visibility != Window.Hidden){
                console.log("here is initWindow animation.")
            }
        }
    }


}

1 个答案:

答案 0 :(得分:1)

因为你没有动画任何东西。 您需要指定目标。

只是一个疯狂的猜测,但你可能想要为高度设置动画?

Window {
    id: root
    visible: true
    title: qsTr("Hello World")
    //        opacity: 0.6 // Does not work for me
    // I want to have the frames and stuff for an example.

    MouseArea {
        anchors.fill: parent
        onClicked: {
            //Qt.quit();
        }
    }

    Component.onCompleted: {
        root.x = 0;
        root.y = 0;
        root.width = 1200;
        root.height = 800;
    }

    Behavior on height { // Starts the Animation with the set target, once the height is set to be changed
        NumberAnimation {
            id: initWindow
            duration: 200000
        }
    }
}

或者更贴近您的代码:

Window {
    id: root
    visible: true
    title: qsTr("Hello World")

    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }

    Component.onCompleted: {
        root.x = 0;
        root.y = 0;
        root.width = Screen.width;
        initWindow.start();
    }

    PropertyAnimation {
        id: initWindow
        target: root
        from: 0
        to: Screen.height
        property: 'height' // You need to declare which property should change.
        duration: 2000
        easing.type: Easing.InOutQuad
    }
}

请参阅评论,了解我的所作所为。 我为你的代码添加了一些不必要的代码。