Qml学习要点记录(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mantis_1984/article/details/81985212

Qml学习要点记录(1)

  • 基本类型的属性没有自己的属性改变信号,只能为基本类型自身创建一个属性改变信号处理器。例如:

Text{
    //不可用
    onFont.pixelSizeChanged:doSomething()
    
    //不可用
    font{
        onPixlSizeChanged:doSomething()
    }
    
    //可用
    onFontChanged: doSomething()
}
  • 声明一个自定义的属性,会隐式地为该属性创建一个值改变信号,以及一个相应的信号处理器;

  • var是一种通用的占位符类型,类似于QVariant,它可以包含任意类型的值,包括列表和对象。例如:

property var someNumber:1.5
property var someString:"abcdef"
property var someBool:true
property var someList:[1, 2, "three", "four"]
property var someObject:Rectangle{width:100;height:100;color:"red"}
  • 注意属性初始化赋值和代码中赋值的区别:

import QtQuick 2.2
Rectangle{
    id:sanjiao
    color:"red" //初始化赋值用 property:value形式
    property color nextColor:"blue"
    
    Component.onCompleted:{
        sanjiao.color = "yellow" //代码中赋值形式 property = value
    }
}
  • 属性别名在整个组件初始化完毕之后才是可用的。

property alias buttonText:textItem.txt
buttonText:"some text" //代码会报错,因为代码执行到这个,整个组件还没有完成初始化
​
//正确的初始化方法应该是这样的:
Component.onCompleted:buttonText = "some text"

属性别名在开发组件时特别有用。QML组件通常是一系列基本类型的有序堆积,一个组件可能有很多子对象,对于组件的使用者,处于封装的考虑,不应该知道这些子对象。然而,组件使用者又不可避免地需要设置某些子对象的属性。此时,可以给子对象属性一个别名,把它作为整个组件的属性在外部使用,既解决了子对象封装的问题,又将有用的属性暴露出来。

  • 方法参数类型不需要明确指定,因为默认的情况下这些参数都是var 类型。如下所示:

    Item {
        id: odongnond
        width: 200;height: 200
        MouseArea{
            anchors.fill: parent
            onClicked:
                lable.moveToMe(mourse.x, mourse.y)
        }
​
        Text {
            id: lable
            text: qsTr("Move to me")
​
            function moveToMe(newX, newY)
            {
                lable.x = newX;
                lable.y = newY;
            }
        }
    }
  • 当同时使用QML和JavaScript时,区分QML属性绑定和JaveScript赋值是很重要的。在QML中,使用“属性:值” 语法来创建一个属性绑定:

Rectangle{
    width:otherItem.width
}

每当otherItem.width 更改时,Rectangle的width属性也会自动更新。但是,下面的代码片段则会在Rectangle被创建时执行:

Rectangle{
    Component.onCompleted:{
        width = otherItem.width;
    }
}

体会以下两者的区别,后者是赋值操作,在创建时已经分配了固定的值。前者是属性绑定,width会随着绑定值otherItem.width变化而变化。

扫描二维码关注公众号,回复: 3811660 查看本文章

猜你喜欢

转载自blog.csdn.net/mantis_1984/article/details/81985212