其中最酷的一個功能確定是QML的屬性綁定.express
From the Qt-Documentation: This is a core feature of QML that allows objects to automatically update their properties in response to changing attributes in other objects or the occurrence of some external event. …the property's value is automatically updated by the QML engine whenever the value of the evaluated expression changes性能
換句話說,這是很是好玩的(好玩個鬼),接下來我將用一個簡短的例子來告訴你這究竟是什麼意思, 首先上一個木有屬性綁定的小項目:ui
import VPlay 2.0 import QtQuick 2.0 GameWindow { Scene{ Text{ id: mouseXText anchors.centerIn: parent color: "blue" visible: false } MouseArea{ id: mouseArea anchors.fill: parent onMouseXChanged: { mouseXText.text = qsTr("鼠標被按下:") + mouseX mouseXText.color = mouseX > 240 ? "red" : "blue" } onPressed: mouseXText.visible = true onReleased: mouseXText.visible = false } } }
在這個小項目場景中,每當你鼠標按下的時候,將打印出鼠標當前的X軸座標.
此外,你能夠試着移動鼠標再按下,並查看鼠標當前的X軸座標.
若是鼠標的的X軸座標大於240(場景的一半),則文本顏色發生變化.lua
當考慮更大的項目時,例如文本組件和MouseArea的代碼不相鄰的狀況下,
須要作一些搜索並找到改變文本組件的對應屬性,爲此會形成一些沒必要要的操做,間接的也增長了開發難度.code
接下來咱們用屬性綁定來改進這個小項目:遊戲
import VPlay 2.0 import QtQuick 2.0 GameWindow { Scene{ Text{ id: mouseXText text: qsTr("鼠標被按下:") + mouseArea.mouseX anchors.centerIn: parent color: mouseArea.mouseX > 240 ? "red" : "blue" visible: mouseArea.pressed } MouseArea{ id: mouseArea anchors.fill: parent } } }
在這個改進的項目中,咱們不單單是減小了幾行代碼,
當咱們移動鼠標的時候,文本組件自身也在隨之改變,
這使得代碼的行爲執行看起來很是透徹明瞭,尤爲是在複雜的大項目中.事件
看一下文本組件的文本屬性:
每當鼠標的X軸座標發生改變時,產生的影響是文本組件得到通知來改變和更新文本值.
能夠看到顏色屬性也受影響,你能夠試試任何JavaScript
表達式,也可使用多個變量,其中任意一個改變,其餘的都會受影響.
最重要的是,經過強大的信號與槽的來實現屬性綁定,意味着完整的C++級別的性能.ip
哇-咱們只是使代碼更短,更易於理解也更快! 假如你不相信我,我還有一件玩意給你.
V-Play也可使用了Qt Creator的一個很酷的功能,你能夠分析你的項目來查找須要改進性能的代碼.開發
##分析你的遊戲或應用程序it
上面2個小項目的分析結果以下:
第一個小項目執行響應的平均時間爲778微秒左右,最長時間爲1毫秒左右
第二個小項目執行響應的平均時間422微秒左右,最長時間爲0.7毫秒左右
在大的項目中這些微小的性能增速將會增長至關可觀的性能,因此請不要低估和忽略它們.
##如今咱們繼續
咱們剛剛品味到了屬性綁定的簡單和效率
你能夠看看這個例子:QML Introduction,展現了屬性綁定的更多強大之處. 若是你在開發遇到其餘任何問題,記得試試分析你的應用程序來查找更多的瓶頸.