基本類型的屬性沒有自己的屬性改變信號,只能爲基本類型自身創建一個屬性改變信號處理器。例如:
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變化而變化。