QML学习(三)对象属性

3 篇文章 0 订阅

http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html

QML对象属性主要有以下几个方面

    the id attribute
//每一个对象都有一个id属性,这个id可以调用该对象的属性,必须独一无二


    property attributes
//一个属性能够呗赋予一个静态值或者动态语句

    signal attributes
    signal handler attributes
    method attributes
    attached properties and attached signal handler attributes
    enumeration attributes

id属性对于每一个对象来说都是独一无二的,并且可以在对象外通过这个id引用其对象的其它属性

Property属性是可以自己定义的,并且可以赋给static value或者dynamic expression,注意propertyName必须以小写的字母开始,并且只能含有字母,数字或者下划线

[default] property <propertyType> <propertyName>//Property的定义方式

还可以为Property属性绑定信号和信号处理函数

Rectangle {
    property color previousColor
    property color nextColor
    onNextColorChanged: console.log("The next color will be: " + nextColor.toString())
}

所有的 Basic Types都可以作为property type,这里面有个很厉害的type就是var,它几乎可以代替所有的类型

property var someNumber: 1.5
property var someString: "abc"
property var someBool: true
property var someList: [1, 2, "three", "four"]
property var someObject: Rectangle { width: 100; height: 100; color: "red" }

Signal 属性是用来通知对象一些event发生了,比如属性变化,动画开始或者结束,以及一个image的下载。一个信号处理函数的声明语法为

on<Signal> //Signal是信号名,第一个字母必须大写

也可以自己定义Signal属性

signal <signalName>[([<type> <parameter name>[, ...]])]
import QtQuick 2.0

Item {
    signal clicked
    signal hovered()//如果属性没有参数,"()"可有可无
    signal actionPerformed(string action, var actionResult)
}

Signal Handler 属性是一种特殊的method attribute,只要QML的signal emit之后,这个handler就会被调用

// SquareButton.qml
Rectangle {
    id: root

    signal activated(real xPosition, real yPosition)
    signal deactivated

    property int side: 100
    width: side; height: side

    MouseArea {
        anchors.fill: parent
        onPressed: root.activated(mouse.x, mouse.y)
        onReleased: root.deactivated()
    }
}

Methods属性可以被event激发,它的定义语句为

function <functionName>([<parameterName>[, ...]]) { <body> }

它的使用方法

import QtQuick 2.0

Item {
    width: 200; height: 200

    MouseArea {
        anchors.fill: parent
        onClicked: label.moveTo(mouse.x, mouse.y)
    }

    Text {
        id: label

        function moveTo(newX, newY) {
            label.x = newX;
            label.y = newY;
        }

        text: "Move me!"
    }
}

附加属性和附件信号处理函数是为object连接一些额外的属性所设计的,实现语句为

<AttachingType>.<propertyName>
<AttachingType>.on<SignalName>

枚举属性暂时没有看出来有什么特别之处,就是一个属性被定义为集中可取值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值