QML 對象中的屬性分配兩種類型的值 靜態值和綁定表達式,后者也稱為屬性綁定。
靜態值:一個不依賴于其他屬性的常數值。 綁定表達式:一個用于描述屬性間依賴關系的 javaScript 表達式。
所謂靜態值,就是一個不依賴于其他屬性的常數值。例如:width : 100,其中 100 就是一個靜態值。
下面的示例,將 Rectangle 的 width 和 height 均分配為靜態值。
import QtQuick 2.0Rectangle { // 初始化賦值 - 靜態值 width: 200 height: 200 Rectangle { // 初始化賦值 - 靜態值 width: 100 height: 100 color: "blue" }}要創建一個屬性綁定,需要為屬性分配一個 Javascript 表達式,該表達式將計算所需的值。 屬性綁定幾種形式
// 訪問對象屬性width: parent.width / 2// 使用內置的 JavaScript 對象 Mathwidth: Math.min(parent.width, parent.height)// 使用三目運算符width: parent.width > 100 ? parent.width : parent.width /2// if-else 代碼塊中的 return 關鍵字可有可無width: { if (parent.width > 100) return parent.width else return parent.width / 2}// 調用js方法height: someMethodThatReturnsWidth()具有綁定的屬性將根據需要自動更新,但是,如果稍后從 JavaScript 語句為該屬性重新分配一個靜態值,則將會移除綁定。
例如,下面的藍色 Rectangle 最初確保其 width 總是其 parent 的 width 的 1/4。但是,當按下空格鍵時,parent.width / 2 將作為靜態值賦值給 width。隨后,即使其 parent 的 width 發生變化,其 width 也將保持不變,因為靜態值的分配移除了綁定。
import QtQuick 2.0Rectangle { width: 200 height: 200 Rectangle { id: rect width: parent.width / 4 //屬性綁定 height: 50 color: "blue" focus: true Keys.onSpacePRessed: { width = parent.width / 2 //屬性綁定移除 } }}如果目的是為了給藍色 Rectangle 一個固定的 width 并停止自動更新,那么這沒有任何問題。但是,如果是為了給 width 和其 parent 的 width 建立一個新的關系,那么新的綁定表達式必須被包裹在 Qt.binding() 函數中:
Keys.onSpacePressed: { width = Qt.binding(function() { parent.width / 2 })//屬性綁定}現在,按下空格鍵后,矩形的高度將繼續自動更新,始終為其 parent 的 width 的 1/2。
新聞熱點
疑難解答