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核心功能-属性绑定

时间: 2024-12-14 03:30:57

qml中的属性绑定与赋值的相关文章

属性绑定与赋值

首先看下面一段示例代码: 1 import QtQuick 2.4 2 import QtQuick.Controls 1.3 3 import QtQuick.Window 2.2 4 import QtQuick.Dialogs 1.2 5 6 Rectangle{ 7 id: root 8 width: 320 9 height: 320 10 color: "red" 11 opacity: 0.3 12 13 Text { 14 id: label 15 x: 20; y:

2-4 Vue中的属性绑定和双向数据绑定

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>属性绑定和双向数据绑定</title> <script src="./vue.js"></script> </head> <body> <div id="root"

vue中的属性绑定和双向数据绑定

<html lang="en"> <head> <meta charset="UTF-8"> <title>属性绑定和双向数据绑定</title> <script src="./vue.js"></script> </head> <body> <div id="root"> <div title=&qu

Vue学习之vue属性绑定和双向数据绑定

··· <!DOCTYPE html> vue <!-- vue中的属性绑定和双向数据绑定 属性绑定: v-bind:title="title" 或 :title="title" 双向数据绑定: v-model --> <div id="root"> <div :title="title">hi man</div> <input v-model="co

EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性

EasyUI 中 DataGrid 控件 是我们经常用到的控件之一, 但是 DataGrid 控件 在绑定显示列时却不支持对象属性绑定. 模型如下: public class Manager implements java.io.Serializable { private Integer id; private Role role; private String loginName; private String password; private int status; private Da

Vue.js学习笔记:属性绑定 v-bind

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如: <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a> 绑定HTML Class 一.对象语法: 我们可以给v-bind:class 一个对象,以动态地切换class.注意:v-bind:class指令可以与普通的class特

Asp.Net MVC在过滤器中使用模型绑定

废话不多话,直接上代码 1.创建MVC项目,新建一个过滤器类以及使用到的实体类: 1 public class DemoFiltersAttribute : AuthorizeAttribute 2 { 3 public override void OnAuthorization(AuthorizationContext filterContext) 4 { 5 var person = new Person(); 6 //过滤器中使用模型绑定 7 BindModel<Person>(filt

QML中的JavaScript用法详解

熟悉JavaScript的应该都了解Netscape公司,一代骄子虽然倒下了,却给后人留下了最为珍贵的产品和经验,在互联网发展史上享有举足轻重的地位,这里就不讲故事了,虽然很精彩,从未被磨灭.QML是对JavaScript的扩展,提供了JS主机环境,用法相似,但有些地方与浏览器/服务器端提供的JS主机环境(如Node.js)是不同的,用起来又有一些限制,下面列举一些常用的方法. 1.QML文件中的JS表达式 初始化时属性绑定-- // Property.qml import QtQuick 2.

WinRT 开发:在 MVVM 模式中,关于绑定的几处技巧

以下会提到三个绑定的技巧,分别是 在 ListView 中为 ListViewItem 的 MenuFlyout 绑定 Command: 在 ListView 的 事件中绑定所选择项目,即其 SelectedItem属性: 处理文本控件与数值属性绑定中默认值0的问题: 一.在 ListView 中为列表项的 MenuFlyout 绑定 Command: 当我们为 ListView 编写了 DataTemplate,并在其中加入了 MenuFlyout 时,而且 MenuFlyoutItem 需要