文档章节

V-Play入门手册3-如何编写高效的代码?

j
 jannn
发布于 2016/04/06 00:09
字数 997
阅读 252
收藏 1
点赞 1
评论 1

其中最酷的一个功能肯定是QML的属性绑定.

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

换句话说,这是非常好玩的(好玩个鬼),接下来我将用一个简短的例子来告诉你这到底是什么意思, 首先上一个木有属性绑定的小项目:

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(场景的一半),则文本颜色发生变化.

当考虑更大的项目时,例如文本组件和MouseArea的代码不相邻的情况下,
需要做一些搜索并找到改变文本组件的对应属性,为此会造成一些不必要的操作,间接的也增加了开发难度.

接下来我们用属性绑定来改进这个小项目:

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++级别的性能.

哇-我们只是使代码更短,更易于理解也更快! 假如你不相信我,我还有一件玩意给你.
V-Play也可以使用了Qt Creator的一个很酷的功能,你可以分析你的项目来查找需要改进性能的代码.

##分析你的游戏或应用程序

  1. Qt Creator的左手边选择分析分析按钮
  2. 点击开始按钮点击开始
  3. 运行你的游戏或应用程序一段时间
  4. 点击停止按钮点击停止在开始按钮下面(通过这个按钮可以停止你的游戏或应用程序)
  5. 查看分析的结果(你应该在这个表中右键打开扩展事件统计)

上面2个小项目的分析结果如下:
第一个小项目执行响应的平均时间为778微秒左右,最长时间为1毫秒左右 分析结果1

第二个小项目执行响应的平均时间422微秒左右,最长时间为0.7毫秒左右 分析结果2
在大的项目中这些微小的性能增速将会增加相当可观的性能,所以请不要低估和忽略它们.

##现在我们继续
我们刚刚品味到了属性绑定的简单和效率
你可以看看这个例子:QML Introduction,展示了属性绑定的更多强大之处.
如果你在开发遇到其他任何问题,记得试试分析你的应用程序来查找更多的瓶颈.

© 著作权归作者所有

共有 人打赏支持
j
粉丝 10
博文 64
码字总数 20006
作品 0
温州
程序员
加载中

评论(1)

彩阳
彩阳
性能测试千万不要忽略哦。难啃的都是这部分呢。
V-Play入门手册

是一个基于Qt的新生代游戏开发框架(主要是2D),后衍生出了App开发框架. 下载和使用开发你的前,必须注册一个的账户( 更新 & 部署 & 其他都需要这个账户), 拥有你自己的账户之后(账户就是你的某...

jannn ⋅ 2016/04/11 ⋅ 0

Python学习手册

一、内容简介 简介来自百度百科 Python学习手册 《Python学习手册(第3版)》是作者根据过去10年用于教学而广为人知的培训课程的材料编写而成的。除了有许多详实说明和每章小结之外,每章还包括...

ryan_bai ⋅ 2017/10/24 ⋅ 0

V-Play入门手册1-如何在5分钟内把你游戏或应用程序带到你的移动设备上?

第一次课程... 如何在5分钟内把你游戏或应用程序带到你的移动设备上? 安装之后,启动()并创建一个新的项目, 这里有一些游戏或应用程序的模版,你可以选择你喜欢的来生成,下面是模版示意图: 新建...

jannn ⋅ 2016/04/06 ⋅ 0

【有奖书评】JAVA 7来袭,还看 Java 你就OUT了

从1995年至今,Java已经超过15个年头,经过这些年的演进,Java已不仅是个程序语言,也代表了解决问题的平台(Platform),更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。若仅以程序语...

louise ⋅ 2012/08/31 ⋅ 123

V-Play入门手册2-如何创建一个多分辨率的游戏或应用程序?

如何创建一个多分辨率的游戏或应用程序? 作为一个开发者,你肯定不想每次都重写一次代码来保证不同设备下相同的用户体验. 但是,你又会遇到一个不可避免的问题:市面上设备的尺寸太多样化了,大的...

jannn ⋅ 2016/04/06 ⋅ 0

Activiti工作流引擎初学教程

http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起...

孟飞阳 ⋅ 2016/07/31 ⋅ 0

V-Play入门手册4-如何获取最新的V-Play更新?

通过维护工具手动更新 安装后,你可以通过Qt的维护工具来获取V-Play游戏或应用程序API的更新, 这个维护工具在你的安装目录下,叫做. 运行这个维护工具并选择更新组件来检查是否有可用的V-Play更...

jannn ⋅ 2016/04/06 ⋅ 0

荐书丨确认过眼神,这份Python书单一定是你的菜

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方...

csdnsevenn ⋅ 05/05 ⋅ 0

Activiti入门教程

初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。它...

wangrikui ⋅ 2015/09/09 ⋅ 4

程序员必读书单 1.0

程序员必读书单 1.0 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然...

imzdx ⋅ 2016/03/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部