版权声明:本文为博主原创文章,未经博主允许不得转载。 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 查看本文章