Qml學習要點記錄(一)

基本類型的屬性沒有自己的屬性改變信號,只能爲基本類型自身創建一個屬性改變信號處理器。例如:

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變化而變化。

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章