QML-Binding

一、概念

Binding用于属性绑定,这是基于QML组件式的属性绑定;QML语法绑定、JS动态绑定见:https://www.cnblogs.com/judes/p/13158840.html。

所以一般称Binding为间接绑定。

二、例子

1、为Loader绑定

使用Loader时,往往时动态加载Component或者QML的,所以在写代码时是不确定Loader的item是什么的,如果想为动态加载的组件属性绑定,使用以往的属性绑定方式是不方便或无法实现的,使用Binding则非常方便。

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.3

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    property int speed_new: 10
    Loader{
        id: l1
        anchors.centerIn: parent
        width: 200;
        height: 200
        sourceComponent: c1
        onLoaded:{
            binder.target=l1.item;
        }
    }
    SequentialAnimation {
        running: true
        loops: Animation.Infinite

        NumberAnimation { target: root; property: "speed_new"; to: 145; easing.type: Easing.InOutQuad; duration: 4000; }
        NumberAnimation { target: root; property: "speed_new"; to: 10; easing.type: Easing.InOutQuad; duration: 2000; }
    }
    Binding{
        id:binder
        property:"speed"
        value:speed_new
    }
    Component {
        id: c1
        Rectangle {
            property int speed: 0
            width: 100
            height: 100
            radius: width/2
            color: "red"
            Text {
                id: t
                text: speed
                anchors.centerIn: parent
            }
        }
    }
}

 

 这个例子是将Loader动态加载【这里其实是静态加载,如果把loader的sourceComponent写在构造函数里辨识模拟动态,这里做例子不影响】,然后将loader的item【c1】的属性speed与一个会变化的speed_new进行动态绑定。

 

posted @ 2021-12-12 11:36  朱小勇  阅读(707)  评论(0编辑  收藏  举报