zoukankan      html  css  js  c++  java
  • 9.qml-property自定义属性

    1.property介绍

    • property用来自定义一个属性,并且可以进行初始化,且没有public、private、protected等限制.
    • property定义属性的类型可以是QML基本类型、也可以是QML对象类型,也可以是var泛型类型,而基本类型支持的有bool、double、int、list、real、string、url类型
    • 自定义的属性默认会有个属性值改变信号,可以通过on<Property>Changed信号处理器来接受该信号。

    示例如下所示:

    Window{
        visible: true
        property int cnt             // 未初始化,cnt默认为0
        property string label: "cnt" // 进行初始化 label = "cnt"
        
        Component.onCompleted: {
            console.log(label+","+cnt);
            cnt++;
            label = "count";
        }
        
        onLabelChanged: {
            console.log("onLabelChanged:"+label)
        }
        onCntChanged: {
            console.log("onCntChanged:"+cnt)
        }
    }

    运行打印:

    qml: cnt,0
    qml: onCntChanged:1
    qml: onLabelChanged:count

    2.基本类型数组属性自定义
    基本类型数组属性自定义,则使用var泛型类型即可,示例如下所示:

    Window{
        visible: true
        property var strList : [
            "str1",
            "str2",
            "str3"
        ]
        
        Component.onCompleted: {
            console.log(strList.length);
            for(var index in strList) {
                console.log(index+": "+strList[index])
            }
        }
    }

     如果我们要创建一个空数组,那么直接初始化赋值为[]即可,比如:

    property var objArr: []

    如果我们想定义二维数组,比如;

     property var rotationModel: [
            ["#00FF00", RotationAnimation.Numerical, 12],
            ["#FF0000", RotationAnimation.Clockwise, 12],
            ["#0000FF", RotationAnimation.Counterclockwise, 12],
            ["#00FFFF", RotationAnimation.Shortest, 12],
        ]
    
        MouseArea {
            id: area
            anchors.fill: parent
            onPressed: {
    
                console.log(rotationModel.length,rotationModel[0].length)  // 打印4,3 表示有4行,每行里面有3列
            }
        }

    3. QML对象数组属性自定义
    如果自定义一组对象数组,则使用list<Object>类型,示例如下所示:

    Window{
        visible: true
        property list<Rectangle> rectList : [
            Rectangle{ id: list1; color:"#FF0000" },
            Rectangle{ id: list2; color:"#FFFF00"},
            Rectangle{ id: list3; color:"#FFFFFF"}
        ]
        
        Component.onCompleted: {
            console.log(rectList.length);
            for(var index in rectList) {
                console.log(index+": "+rectList[index].color)
            }
        }
    }

    如果用var去存储QML对象数组,将会报错,因为var类型接受的array数组只能是基本类型,而Rectangle是个对象.

    4.只读属性自定义
    只读属性必须初始化,且不能修改,只需要在property前面加上readonly即可.
    比如:

    readonly property string type: "readonly"

    人间有真情,人间有真爱。

    如果您喜欢这里,感觉对你有帮助,并且有多余的软妹币的话,不妨投个食吧,赞赏的时候,留下美句和你的博客地址哦~   戳这里看谁投食了


查看全文
  • 相关阅读:
    SpringBoot集成Swagger2并配置多个包路径扫描
    SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入
    SpringBoot + SpringSecurity + Quartz + Layui实现系统权限控制和定时任务
    Redis数据持久化(RDB、AOF)
    so安全编译选项(栈溢出保护)
    Python调用Chrome下载文件
    AtomicInteger如何保证线程安全以及乐观锁/悲观锁的概念
    SpringCloud:Eureka的健康检测机制
    共享锁(S锁)和排它锁(X锁)
    Collection接口及其常用子类(java.util包)
  • 原文地址:https://www.cnblogs.com/lifexy/p/14628263.html
  • Copyright © 2011-2022 走看看