variant QML Basic Type

variant类型是泛型属性类型。它已经过时,只支持旧的应用程序;新的应用程序应该使用var类型属性。

变体类型属性可以保存任何基本类型值:

Item {
    property variant aNumber: 100
    property variant aString: "Hello world!"
    property variant aBool: false
}

在与c++集成时,请注意,从c++传递到QML的任何QVariant值都会自动转换为变量值,反之亦然。

Using Scarce Resources with the variant Type

变体类型属性还可以保存图像或位图。包含QPixmap或QImage的变量被称为“稀缺资源”,声明式引擎将尝试在任何需要复制的JavaScript表达式计算完成后自动释放此类资源。

客户端可以通过在JavaScript中调用variant属性上的“destroy”方法来显式地释放这样的稀缺资源。它们还可以通过在JavaScript中调用变体属性的“preserve”方法来显式地保留稀缺资源。

Storing Arrays and Objects

变体类型也可以保留:

> 基本类型值的数组

> 具有基本类型值的键值对的映射

例如,下面是一个项数组和一个属性映射。可以使用JavaScript for循环检查它们的内容。单独的数组值可以通过索引访问,单独的映射值可以通过键访问:

Item {
    property variant items: [1, 2, 3, "four", "five"]
    property variant attributes: { 'color': 'red', 'width': 100 }

    Component.onCompleted: {
        for (var i = 0; i < items.length; i++)
            console.log(items[i])

        for (var prop in attributes)
            console.log(prop, "=", attributes[prop])
    }
}

虽然这是一种方便的存储数组和映射类型值的方法,但您必须注意,上面的项和属性属性不是QML对象(当然也不是JavaScript对象),属性中的键值对也不是QML属性。相反,items属性保存一个值数组,而attribute保存一组键值对。

此外,由于项和属性不是QML对象,更改它们包含的值不会触发属性更改通知。如果上面的例子有onItemsChanged或onAttributesChanged信号处理程序,那么在为其中任何一个属性中的单个条目赋值时都不会调用它们。但是,如果将项或属性属性本身重新赋值给不同的值,则将调用此类处理程序。

JavaScript程序员还应该注意,当将JavaScript对象复制到数组或映射属性时,复制的是对象的内容(即其键值属性),而不是对象本身。该属性不包含对原始JavaScript对象的引用,并且对象的JavaScript原型链等额外数据也会在过程中丢失。

这个基本类型是由QML语言提供的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值