码迷,mamicode.com
首页 > 其他好文 > 详细

qml中的属性绑定与赋值

时间:2015-04-14 19:46:04      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:qml   属性绑定   

浅谈qml属性绑定与赋值

属性赋值

就字面意思,赋一个值给属性


Rectangle {
    id:rect
    Component.onCompeleted:{
        rect.width = 10; // 赋值
        rect.height = 10; // 赋值
        rect.color = "red"; // 赋值
    }
}

属性赋值时会发出信号,可以通过信号处理器,来为信号添加处理函数,关于信号处理器,也就是连接到同一个信号的槽函数的队列,每次为信号处理器书写处理函数时,并不会覆盖上一次书写的处理器,最新的处理函数会添加到信号处理器的处理队列的尾部,信号处理器被触发时,按照队列,先进先执行。(类似于修饰模式了)。

属性绑定

绑定到表达式

属性绑定可以让属性绑定到一个表达式,例如一个数字,一个字符串,一个函数,一个运算表达式,或者一个有返回值的代码块。


Rectangle {
    id:rect
    width:10 // 绑定到一个数字
    height:10 + 10 //绑定到表达式
    radius:{
        if(width > 10) return 2;
        else return 3;
    } // 绑定到一个代码块
    color:Qt.rgba(1, 0.9, 0.8, 1); // 绑定到一个函数
}

通过Binding绑定属性

Rectangle {
    id: root
    width: 100
    height: 100
    Text{
        id: showText
    }
    Binding{
        target:id:showText // 被绑定的对象,可以是通过c++注册的单例对象
        property:"text" // 通过字符串来找到属性
        value: root.width // 绑定到root.width
        // Binding 相当于
        // bool QObject::?setProperty(const char * name, const QVariant & value);
    }
}

通过PropertyChanges来绑定

import QtQuick 2.0

Item {
    id: container
    width: 300; height: 300

    Rectangle {
        id: rect
        width: 100; height: 100
        color: "red"

        MouseArea {
           id: mouseArea
           anchors.fill: parent
        }

        states: State {
           name: "resized"; when: mouseArea.pressed
           PropertyChanges { target: rect; color: "blue"; height: container.height }
        }
    }
}

PropertyChanges一般配合State来使用


通过Qt.binding(function)来指定一个函数来绑定到属性

Rectangle {
    id: rect
    width: 100
    height: 100
    Component.onCompeleted: {
        width = 200; // 仅仅只是赋值操作
        height = Qt.binding( function(){
                return width*1.5;
            }); // 直接绑定到一个函数
    }
}

被绑定的表达式,内部含有对象的属性的话,那么每当属性变化时,就会发生信号,绑定表达式的属性就会根据表达式动更新自己。


QML核心功能-属性绑定

qml中的属性绑定与赋值

标签:qml   属性绑定   

原文地址:http://blog.csdn.net/qyvlik/article/details/45046227

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!