QML淡出更改的项目

时间:2015-08-16 22:51:47

标签: binding properties qml transition

我是Qt和QML的新手 - 这似乎是一个相当简单的问题,但我无法找到一个简单的解决方案。

说我有以下示例QML

ScrollViewer.VerticalScrollBarVisibility="Hidden" on your inner list views.

现在当obj属性变为null时,我想淡出obj_container项,同时仍然显示它在设置为null之前的值。

或者,如果obj项目更改为不同的obj,我想淡出obj_container项目(仍然显示其先前的值),然后使用新值再次淡入它。

我该怎么做?

更新

示例中的obj是使用C ++中的setContextProperty设置的对象的Q_PROPERTY,如

Item {
    ... lots of other stuff

    Item {
        id: obj_container

        property var obj

        Text {
            text: obj.name
        }

        Image {
            source: obj.source
        }
    }
}

上面示例中的obj属性将设置为

engine.rootContext()->setContextProperty("obj_holder", &obj_holder);

虽然我认为出于上述目的,obj属性的来源或设置/更改方式并没有什么区别。当obj改变时,上面应该发生(用旧值淡出obj_container,用新值淡化obj_container)

1 个答案:

答案 0 :(得分:0)

使用Animation之一可以轻松完成淡出。

例如:

import QtQuick 2.4
import QtQuick.Window 2.2


Window {
    width: 600
    height: 400
    visible: true

    Text {
        id: txt
        anchors.centerIn: parent
        property int count: 0
        text: count
        opacity: 1
        font.pixelSize: 100
         SequentialAnimation {
             id: anim
             PropertyAnimation {
                 target: txt
                 property: "opacity"
                 to: 0
                 duration: 1000
                 easing.type: Easing.OutQuart
             }
             PropertyAction {
                 target: txt
                 property: "count"
                 value: txt.count + 1
             }
             PropertyAnimation {
                 target: txt
                 property: "opacity"
                 to: 1
                 duration: 1000
                 easing.type: Easing.InOutCubic
             }
         }
    }

    Timer {
        interval: 2000
        repeat: true
        running: true
        onTriggered: anim.running = true
    }
}