Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 相同两个状态之间的不同过渡动画_Qt_Qml_Qt Quick - Fatal编程技术网

Qt 相同两个状态之间的不同过渡动画

Qt 相同两个状态之间的不同过渡动画,qt,qml,qt-quick,Qt,Qml,Qt Quick,是否可以在QML组件的两个状态之间使用不同的转换动画?以下示例不起作用,程序崩溃(Linux上的分段错误): 以下示例不起作用,程序崩溃(Linux上的分段错误): 请向我报告这样的事故。崩溃被给予最高优先级,通常在几天内修复 QML文档说transtition属性是只读的,但通常会为该属性分配一个Transition{…}元素列表,所以它不可能是真正的只读的,不是吗 我认为在运行时分配(即:在脚本中)与在qml文件中分配不同,因此当说“只读”时,可能意味着您不应该在初始化后更改该值 无论如何,

是否可以在QML组件的两个状态之间使用不同的转换动画?以下示例不起作用,程序崩溃(Linux上的分段错误):

以下示例不起作用,程序崩溃(Linux上的分段错误):

请向我报告这样的事故。崩溃被给予最高优先级,通常在几天内修复

QML文档说transtition属性是只读的,但通常会为该属性分配一个Transition{…}元素列表,所以它不可能是真正的只读的,不是吗

我认为在运行时分配(即:在脚本中)与在qml文件中分配不同,因此当说“只读”时,可能意味着您不应该在初始化后更改该值

无论如何,如果医生说它是只读的,当你试图写入它时它崩溃了,那么你知道你可能不应该这么做…:)

但我想知道,如果不引入新的州,这样的事情是否可能发生

关于转换的qml文档说明:

如果指定了多个转换,则对于任何特定的状态更改,将仅应用单个(最佳匹配)转换。在上面的示例中,当更改为state1时,将使用第一个转换,而不是更通用的第二个转换

因此,您可以尝试一次定义所有转换,并动态更改“到”和“从”设置,以尝试启用/禁用转换。不确定这是否可能,但它可以工作

import QtQuick 1.0

Rectangle {
    id: canvas
    height: 500; width: 600

    Rectangle { id: rect; color: "#04A"; height: 100; width: 100 }

    state: "A"
    states: [
        State { name: "A"; PropertyChanges { target: rect; x: 0; y: 100 } },
        State { name: "B"; PropertyChanges { target: rect; x: 500; y: 100 } }
    ]


    transitions: trans1

    property list<Transition> trans1: [
        Transition {
            NumberAnimation { target: rect; property: "x"; duration: 500 }
        }
    ]

    property list<Transition> trans2: [
        Transition {
            from: "A"; to: "B"
            SequentialAnimation {
                NumberAnimation { target: rect; property: "x"; from: 0; to: -100; duration: 250 }
                NumberAnimation { target: rect; property: "x"; from: 600; to: 500; duration: 250 }
            }
        },
        Transition {
            from: "B"; to: "A"
            SequentialAnimation {
                NumberAnimation { target: rect; property: "x"; from: 500; to: 600; duration: 250 }
                NumberAnimation { target: rect; property: "x"; from: -100; to: 0; duration: 250 }
            }
        }
    ]


    // test script /////////////////////////////////////////////////////////

    Timer { interval: 1000; running: true; onTriggered: canvas.state = "B" }
    Timer { interval: 2000; running: true; onTriggered: canvas.state = "A" }

    // change kind of transition
    Timer { interval: 3000; running: true; onTriggered: canvas.transitions = trans2 }

    Timer { interval: 4000; running: true; onTriggered: canvas.state = "B" }
    Timer { interval: 5000; running: true; onTriggered: canvas.state = "A" }
}
import QtQuick 1.0

Rectangle {
    id: canvas
    height: 500; width: 600

    Rectangle { id: rect; color: "#04A"; height: 100; width: 100 }

    state: "A"
    states: [
        State { name: "A"; PropertyChanges { target: rect; x: 0; y: 100 } },
        State { name: "B"; PropertyChanges { target: rect; x: 500; y: 100 } }
    ]


    property int transType: 1

    transitions: [
        Transition {
            from: transType == 1 ? "*" : "none"
            to:   transType == 1 ? "*" : "none"
            ParallelAnimation {
                RotationAnimation { target: rect; property: "rotation"; from: 0; to:360; duration: 500 }
                NumberAnimation { target: rect; property: "x"; duration: 500 }
            }
        },
        Transition {
            from: transType == 2 ? "*" : "none"
            to:   transType == 2 ? "*" : "none"
            NumberAnimation { target: rect; property: "x"; duration: 500 }
        }
    ]


    // test script /////////////////////////////////////////////////////////

    Timer { interval: 1000; running: true; onTriggered: canvas.state = "B" }
    Timer { interval: 2000; running: true; onTriggered: canvas.state = "A" }

    // change kind of transition
    Timer { interval: 3000; running: true; onTriggered: canvas.transType = 2 }

    Timer { interval: 4000; running: true; onTriggered: canvas.state = "B" }
    Timer { interval: 5000; running: true; onTriggered: canvas.state = "A" }
}