现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

刘峥:Qt Quick的历史与五大特点

2014-09-28 21:20 工业·编程 ⁄ 共 8301字 ⁄ 字号 暂无评论

   作为资深的Qt Quick专家,刘峥认为Qt Quick是一门大道至简的开发技术,而其中的QML语言更是适合所有开发者使用,再加上丰富的QtDeclarative模块,令开发程序成为一个简便的、高效的过程享受。除了对Qt Quick的开发特性进行详细讲解外,刘峥还对QML、JS与C++的混合编程进行了讲解,介绍了Qt Quick跨平台的支持性能。

首先说起Qt Quick,我们第一个想法就是Qt Quick到底是一个什么样的产品?它到底是做什么用的?我们说Qt Quick从名字上来讲它一部分是QT,一部分是Quick,Qt 是什么呢,是它之上建立的产品,Quick是给我们带来一些便利,让我们开发程序更快。

具体Qt Quick是什么呢?我先给大家讲一点历史,Qt Quick来自于我们一次演示,我们的工程师有一次参加某一个大会,然后回来就跟我们说,说我在大会上看到了一个卖水果的公司开发了个手机,效果真是不错,我们这些做Qt Quick的人非常羡慕,后来说我们这些人也不比人家差,为什么我们不能开发一个类似的东西呢?于是我们有了一个新的项目,让开发者可以方便的调用,让你的程序变成带有动画、带有过场的漂亮界面。后来又做了脚本层,让大家通过脚本更方便创建动画效果和界面,自从有了QML,Qt Quick就诞生了。

QML是前端的解释语言,通过解释器就是C++的基础实现,然后我们整合到屏幕上,如果基础实现不够好,可以通过第三方C++插件可以扩展,这样就可以得到你所需要的功能了。

可能大家听完了以后还是一头雾水,到底Qt Quick擅长什么,长什么样,我给大家几个模型,给大家看一下。首先这是一个翻牌的效果,常做C++的人应该知道,这是一个状态转换的小程序,这个代码非常简单,然后这个是略微复杂一点的,你看这个就是我们即时贴,可以往里面挑字,可以移动,可以有多页,有很漂亮的动画效果。这个程序说是复杂,也不过是一两百行,从这个例子可以看出Qt Quick是什么产品呢?

实际上它是描述界面的一种解释型语言,然后它可以实现界面之间的平滑转换,可以增加动画效果,可以增加过场效果,它可以让你拥有一个非常漂亮、光滑,像行云流水一般的界面,然后在里面你又可以嵌入可以做一些简单的逻辑计算。Qt Quick最擅长做界面。它不擅长做计算密集型需要非常复杂逻辑的那种程序。它和FLASH不一样,FLASH是一点一线画出来的动画,QML是原始是一个图片,这样方便了程序员,虽然限制了你一点自由,但是整体上非常便利,至于程序效率问题,我们可以通过用C++插件里实现。

Qt Quick的五大优点

下面我就说到Qt Quick它到底有什么特色?相比于其他的类似的解决方案它有什么优点?

我大概总结了一下,这些优点可以用五个汉字来描述。这五个汉字就是速、美、强、广、帅,速就是说它虽然是一种解释型的语言,但是开发起来非常快,运行起来也非常快。美就是你用这个程序的时候你非常自由,几乎没有什么限制,用很简单的代码可以作出漂亮的图画,和以往的C++不一样,任何状态你都可以最终连续、带动画、非常漂亮的界面。至于强,就是说它有非常大的扩展能力,它可以跟其他语言共同工作。广就是说它支持各种各样的平台,在平台上有很好的加持。帅指的是3D就是我们组做的那个。本来我做这个想说Qt Quick,我想给大家讲QT 3D的东西。

接下来我们以这五个字为主线,我们来说一下Qt Quick到底速、美、强、广、帅在哪儿?

首先说这个速字,我们说的是运行时的速,它对你开发能提供什么样的加速,我们知道开发的成本分成两部分,一部分是你学习的工具,体验这个供给的成本,另一部分是使用这个东西本身的成本。

QML是一个非常简单的,大概有十几种元素,我觉得QML是我见过最简单的脚本语言之一,本来它是生命式语言,它这个东西把复杂的东西全都隐藏起来,给用户看到的QML部分是最简单的,你看过一个例子你马上就能模仿出这个功能,比如说咱举一个例子,举一个HTML5非常复杂。而QML非常简单,这一点我可以保证。另外QML这个工具非常适合员工开发。现在做员工开发最难的是什么?就是画界面,虽然有各种各样的画界面的东西,但是用起来并不顺手。QML是一个一体化的解决方案,你所有的逻辑、界面,包括设置全都写在QML里面,所以你一个文件里面包含了你所有需要的东西,你开发出一个原形,所以他非常适合员工开发,如果你再学到一些产品就是最终产品。如果你仅用QML进行开发,可以把元旦打包发布,然后在QML端运行。如果有C++参与其中,你可以用我们Qt Quick给你进行打包,可以发布到桌面上,部署和交互也都很简单。最后一个就是它可以快速修改和重构,QML结果非常简单,层次明显,修改起来非常简单,你重构完了完全不用重新设计重构的逻辑,照样可以运行。你修改逻辑不影响界面,你修改界面不影响逻辑。就是说QML是一个一站式的解决方案。

我们设计QML的时候,你可以在里面找到各种设计模式的影子。这种东西我建议没有用QML的人赶快试一下,看看对你的速度有多大的提高。

接下来我们再说一下开发环境和工具的支持。QML虽然好但是也要有好的开发环境支持,比如说HTML5大家都说它好,但是现在还没有一个好的编辑器械,但是QML不一样,我们有Qt Quick,而且它内部的支持,比如说网络透明,QML你不用写任何的代码,自动可以到网上下代码,它可以支持XML支持,你用一句话就可以得到SOFT支持,然后它又支持多线程,用它以后可以好几个线程同时运行,这样你的永远可以点击的。还有你可以在QML里面弄一个小的数据库,而且支持国际化,支持下载字体,更重要它还支持QT集成。另外从开发支持方面,你可以在设备上调试QML,包括QML一些功能你都可以在里面实现。部署更不用说了,Qt Quick可以直接发送上去,其实这个是相当容易的,你如果熟悉了一点都不难。

总而言之,QML或者说Qt Quick它是一个博采众长,大道至简的一套程序。有一次我跟一个朋友谈起来,我们用的Qt 、HTML5、C++你如果把它比喻成音乐,你觉得它是什么类型的音乐?我那个朋友是一位音乐家,他跟说,我觉得这个QT非常的标致,一板一眼,非常有规律,有节奏,又很优美,它很像莫札特写的曲子,让人感觉身心很舒畅。而QML比莫札特更进一步,有一些艺术的气质,像肖邦钢琴曲,你写代码的时候你感觉不是写代码,而是写诗。我说HTML5是什么呢?他说HTML5想半天我觉得有点像周杰伦的歌,为什么呢?语法含糊,说的不明确,你还没听懂,已经出新版本了。然后粉丝很多,但是能听懂的人其实并不多。一个人耳朵里听出一个样。

接下来我们说第二个字就是“美”。

美在每个人心里都有不同的定义。究竟什么样是美的呢?我想了很久,怎么样给大家演示一个美的界面,让大家看了眼前一亮,后来我想,我不是这块料,因为我是一个程序员,我没那么高的美学素养,我就拷贝了一些现实中比较受欢迎的这些大家理想的界面,在这里我做了几个模型给大家看看,我还要做一个和大家晓得互动,因为我做这几个模型,我想授的时候想让大家猜一下我到底用了多少含代码的功能。

首先我们看这个模仿某建筑公司项目,大家猜猜用了多少行的代码,支持十行请举手?觉得一百行写出来请举手?其实我这用了199行程序,回头我放网站上,大家下载看一下。我们再来看某水果公司生产的手机产品。大家猜一猜这个用了多少代码,觉得比刚才那个多的请举手。大家真识货,这个用了162行代码。我们再来看水果公司生产的台式电脑产品。这个相对比较简单,大家能猜到它用的代码不会那么多,但是我还是让大家猜一猜,觉得100行程序才能实现的请举手,80行实现请举手,70行实现请举手,我告诉大家一共用了61行程序,就完成了这样一个界面。在这里就看出QML是多么简练,维护61行的程序和维护一个我想写这样的界面千八百行的程序,哪一个更简练已经昭然若揭。

说到这里我就得说一些题外话,编程跟艺术的关系,这个题目比较大,说实话我也不是一个文艺青年,我对艺术这些东西不太懂,但是我一直非常羡慕艺术家。我觉得艺术家设计的东西比咱程序员设计出来要漂亮的多,但是程序员为什么就成不了艺术家呢?我一直在思考这个问题。我想一个程序员要想成为艺术家有两个要素,第一个要素就是要有必要的艺术修养,第二个要素就是要有顺手的工具,我觉得现在程序员成不了艺术家问题所在就是我们的工具太不好了。有的时候大家都有这么一个经验,你设计的时候你把软件的功能想象非常美好,结果做出来一团糟,非常难看。我们现在怎么能解决这个工具的问题呢?QML就是最好的解决方案,QML为我们提供了一种以编程方式来设计界面的这种方法,而且这种方法非常简练,设计出代码非常有效,所以我们现在已经解决了第二个问题,我们只要提高自己的艺术素养,每个程序员都能成为一个艺术家。

另外QML在美的方面提供了更多的价值,最点明一个就是粒子系统,再就是光影效果,这是QML里面的一个小游戏。我们可以看到它消隐的时候实际上是有一个消隐的爆炸效果,而且落的时候会稍微落过一点,这个游戏的代码非常小,大家有工夫可以看一看。这是我花五分钟写了这么一个礼花的程序,这就是典型的爆炸效果,这个代码可能不到50行。这个是我们另外一个演示程序,就是说QML你可以在嵌入光影的着色程序写到里面作为一个字母串,QML会给你进入GPO里计算,给你创造比较漂亮的效果。这个是水波纹的效果,这个是筒射的效果,源代码非常简单。

说完了这个就说说“强”,强的特点是什么呢?

什么叫做“强”,我想扩展能力才能叫强,你能涵盖所有的领域才叫做强,QML不可能是这样的,总有一天你会用到QML里面没有的元素,这时候怎么办呢?我们可以用两个方法,第一个方法是可以用QML和C++混合编程。另外一个办法就是把C++做成一个插件或者是一个扩展,加到程序例,这种方法就可以同用,永久的使用。先来说说QML的扩展能力,扩展大概分三部分,第一步是创建框架,第二定制属性,第三定制动作,然后再就是包装插件。普通一个实例看一下,受到前两位展示代码的刺激,我把它画成图了,叫QML曲线图,因为有一个同事炒股票,看到曲线图就闹心,这个是最终结果。需要两个文件,一个是里面的一条线CURVE,另一个是STOCKS就是整个框架,还有下面几个文件。

我们先看STOCKS声明,在这里面我们声明了一个粒子属性,可以把它压到里面,底下就是读写这两个属性的数。这个就是以一条CURVE,这就定义了属性和方法。我们看看APP和QML是怎么使用扩展我们的属性,做出来效果就是这样,就这么简单。如果你要包装成一个插件,步骤比较复杂,虽然是半步,但是相当复杂。我们有一个简单的方法,我们可以用Qt Quick,如果要做成插件几乎什么都有,你再进去找我刚才说的方法定制几个属性的方法就完活儿了。然后我们在来说一说QML  JS与C++混合编程,我们单独抽出做一个JS程序,QML就可以直接调用其中的函数,通过嵌入CONTEXT进入QML,C++也是透明的,两部分都可以调用。混合编程最难解决通信问题在这里面完美解决了。值得一提的是他们俩还可以访问同一系统,没有任何门槛,如果你熟悉QT,简单就像吃一个苹果。

接着我们来说广

其实这个主题没什么可说的了,就是对多平台的支持,刚才我两位同事已经讲了非常透彻了,怎么进行编程,讲的非常好,比我讲的好多了。我就想强调一下,我们现在支持的平台官方支持的平台,包括OXX、MeeGo,它在这个设备商都很好,很流畅,放心用吧!这段是MOBILITY刚才陈啸天已经讲的非常清楚了,联系人、日历、网络、服务目录、值空间,邮件通信,包括MIS、包括MES,还有E—MAIL,还有力反馈你可以操纵手机上的振动摩托。另外还要提一下MOBILITY,虽然HTML5是周杰伦的歌我们还是要支持它,所以我们提供了YP的插件,就是你可以在MOBILITY里面做一个插件,分析内容都可以做到了。另外对于各个平台来说我们做了统一风格的QT COMPONENT,如果你这样用了,有一种统一的美。这样也避免了你从头开始重新做按钮的工作。

最后我们说到了最感兴趣的部分就是这个帅。帅直的就是3D,3D就是帅,我是来自QT3D这个小组,我们的老板在走之前,千叮万嘱叫我一定要推广3D,我说没有问题,3D是每一个程序员都会喜欢的东西,因为什么呢?因为每一个程序员都有一个游戏梦,现在3D的门槛降的非常非常低。

先来看一个程序,这个程序短至26行,第一行引入Qt Quick1.0,第二个引入QT3D1.0,放一个窗口,定一个视点,然后放一个ITEM3D,我们再给它加一个变形程序,让它绕着这个无限转下去,最后这一行我们调一个3D模型,这个模型是1959年生产的卡莉汽车,记住这是一个26行的QML的程序。这就是最终的效果,我们用26行的程序写出了一个在空中旋转的小汽车。从此你就可以看出QML有多强大,QT 3D有多强大了,你如果想在屏幕上画点画线更是没有问题。

我们看一下QML都有哪些功能,我们总结成大概有七类

第一个它可以画基本形状,可以画这几条线,可以画多边型,也可以画茶壶之类的。

第二它可以装入模型,我们支持二十到三十种模式的图形,大部分主流的3D设计程序我们都可以很方便导入进来,接着可以加入动画,这个动画可以是缩放、可以是变形,各种各样动画合并一起,接着我们可以增加更多的四周可以有蓝天白云,可以创造个世界,创造一个舞台,这样方便你创造一些像森林、观众、这样大规模数量很多的物体,然后抓取支持,而且我们还支持光影效果,同样可以嵌入,让GPO替你作出美轮美奂的效果。

下面我们就看QT3D的模型。这个英文名叫《机器人小霸》,这完全是用QML做出来的动画和条幅,可以看到用QML可以实现一些小游戏了。另外一个游戏叫《登录月球》。这个叫《美猴王》,你可以看到一群企鹅在一个猴子面前跳舞,我的理解就是你要想让领导点头就要在他前面跳舞。这个是我们另外一位工程师叫朱丽叶,他在3D相册的时候,把他漂亮的老婆放进去了。这是一个真正的3D相册。有兴趣可以看一下QT3D的源代码。这是一个把一个茶壶压扁张开,再压扁再张开,这是另外一种压扁的方式。可以改变它的形状、颜色、投影,这些在QT3D里现在都可以支持。

好了,到现在为止我们已经说完了这五个特点,不知道大家是不是对这五个特点有所认同。而我觉得Qt Quick这个产品的确称得上这五个字。另外请大家注意Qt Quick是非常非常年轻的产品,它开发到现在可能就是三年左右的时间,发布时间也就一年左右,到现在发布1.1版,在软件业来说是比较早的,能达到这种成熟程度已经不容易了。

Qt Quick发展前景与商业展望

Qt Quick工程师更多着眼于未来。我们就来看一下,Qt Quick将来会为我们提供一些什么样的激动人心的功能?即将登场的功能,Qt Quick或者说QML2.0我们提供如下的功能和动画,首先是完整的路径动画,以后我们可以定义一个QT PAST,让Qt Quick按照路径运行。因为QML2.0会和Qt Quick5.0发布,Qt Quick5.0是完全模块化的系统,你可以选择性的安装,减少你系统的消耗,会有更多的插件出现,包括完整的插件和其他一些更有用的功能,请大家期待。而且我们会在更多平台上发布组建库,而且还有画度的曲线。另外我们还会有一个全新的引擎,就是JS引擎。

我们再看QT3D提供什么功能,QT3D比QML和Qt Quick更加年轻,它现在连1.0都没发布,它预期会和Qt Quick5.0一起发布。在1.0里我们将提供开发工具集成,就是可以在Qt Quick模型分块引用,我们会支持骨骼动画,在里面就可以自由的棒放,支持渲染到纹理。我们也会提供三维额路径动画,和Qt Quick将会使屏幕有方向,还会集成物理引擎,有了这个东西你就可以做一个3D愤怒的小鸡,我们还支持三维输入设备支持,以后体感输入我们都支持。下一年如果有机会我就用体感来写这个东西。

说了这么多大家可能还是比较关心QML到底适合不适合这些功能,我说的都是技术方面的东西,在商业方面我不是很有发言权,但是我还是要说,Qt Quick现在已经成为诺基亚软件战略核心部分,诺基亚自主开发的新的系统、新的设备都已经以它为中心在运转,而且我们所有的团队都已经参与到Qt Quick的使用中来了,而且Qt Quick本身有一个非常强大的测试和开发团队,它主要是在办公室开发的,但是其他办公室参与也很多,我们有一批世界上一流的工程师在从事这个工作,所以大家能够期待我们有持续的更新和强有力的支持,所以对Qt Quick一定要有信心,Qt Quick将来一定会更快更美更强更广更帅,而且我们市场营销部门已经作出表率,现在正在进行强有力的市场规划活动,目标就是培养广泛成熟的社区群体,我们有了这个社区,有了这个生态系统,这个产品才能真正的成功,更重要的是我们还会坚持完全开源、开放式的办理,所有人都能参与进来,不仅仅是诺基亚的产品,这也是全世界程序员共有的一笔财富。

我们都知道许多产品都号称自己是开源,但是我相信大家都是名理的人,大家都知道什么样是真开源,什么样是假开源,诺基亚是真开源,每一行代码你都能看见,每一行代码你觉得好都可以要求修改,你的任何要求我们都会认真考虑。所以我们也需要你参与进来。对Qt Quick和QT3D提供支持,我们需要你的意见和建议,哪怕你骂我们一顿,我们都觉得心里很舒服。

我觉得咱们中国的程序员还是太害羞了,有的时候觉得这个东西不好用,我们就自己去改,自己去想办法,不要这样,以后你发现了问题要及时上报给Qt,包括您有什么解决方案也可以一起发给我们。因为我是做资源控制工作,我们发现一个软件的质量和工程师的素质和测试者的素质并不是有很强相关性,反倒是它和使用者的数量和素质非常有关系,所以我恳请大家使用Qt Quick,帮我们改进这个质量。因为使用就是最好的测试,您可以帮我们把Qt Quick做成一个更好的产品。

如果您愿意,如果您有这个能力,我们更欢迎您为我们奉献代码,因为这个是全世界、全人类的财富,我们把它开放给大家,开放式管理,就是为了让它为人类造福。而且我们现在面临软件界面更新换代走入一个新时代的时期,在这个时候我们希望你们能够参与进来共同见证这个历史,我们共同书写这场历史。

我的演讲大概就到这里。还有一句话,诺基亚非常关注在中国的市场,诺基亚也认为,中国是诺基亚的未来,QT的未来在中国,Qt Quick的未来更在中国,我回头把我演讲的PPT放到网上,欢迎大家学习指导。

与会者Q&A环节

提问:QML是蛮好的一个接口。不过十月份苹果发布了一个IPHONE4S,里面有一个SIRI,这提醒我们今后用户的接口可能就是智能了。QML有没有考虑语音的UI,我在上午看到Qt Quick里面没有提到对语音UI的支持?

刘峥:这个问题首先我得说很多用户对SIRI出现了不理智的消费现象,但是我个人认为SIRI确实是一个好东西。我们也讨论过这个问题,我们做的时候就想过要不要加入语音支持,我们觉得这个东西还不是很紧迫,相对于其他需求来说这个东西还不是特别重复,而且会带来一些很大的负担,所以一开始做的时候就没有把它加入里面,但是我也注意到有些开源社区做了以QT来实现类似语音输入的产品,而且我们现在我觉得应该也有这个计划在做各种输入设备的支持,包括三维输入设备、体感输入设备,虽然我这个级别还看不到这些信息,但是我估计应该有,如果您觉得这个东西很好的话,我建议您在我们网站上登录一条建议,叫他们考虑,加速这个东西的开发。

提问:以前CBM里有一个多角化类似语音的软件应用,现在有没有考虑在QT里面也把这个拿过来?

刘峥:这个具体细节我不太清楚,但是这个东西和SIRI区别很大,它还是一个网络的应用,所以塞班那个东西继承过来很容易,但是如果做就做一个更好的。因为我们有个习惯要做就做世界第一,不会做第二。

提问:我有一个问题是关于QML?第二个问题是直接操作JPU直接显示?

刘峥:在QT5.0当中他们已经合二为一了。

提问:带网底层是一个接口层吗?因为从来没有听说过?

刘峥:S还是在X和E上面,里面接什么都可以,这些能力更强。

Qt将被打造成应用开发的核心组件,而目前世界各地已有超过1亿套的诺基亚Qt智能移动终端操作系统设备,这意味着Qt开发者将在未来拥有更庞大的目标受众而从中获得更大利益。

作者:刘峥

给我留言

留言无头像?