其中最酷的一个功能确定是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,展现了属性绑定的更多强大之处. 若是你在开发遇到其余任何问题,记得试试分析你的应用程序来查找更多的瓶颈.