诺基亚开发框架Qt的前世今生

移动开发
诺基亚近日也正式发布跨平台的应用程序和界面开发框架Qt的最新4.7版本。这个版本使Symbian和MeeGo统一了开发环境,对于Symbian系统,Qt 4.7担负着老树开花的重任,对于MeeGo系统,Qt 4.7则担负着开疆扩途的使命。

编者按:本文为ifanr 邀请一名 Qt 开发者toartist 写的一篇Qt的回顾和展望文章。诺基亚近日也正式发布跨平台的应用程序和界面开发框架Qt的***4.7版本。这个版本使Symbian和MeeGo统一了开发环境,对于Symbian系统,Qt 4.7担负着老树开花的重任,对于MeeGo系统,Qt 4.7则担负着开疆扩途的使命。

2010 年 10 月 21 日,诺基亚宣布,决定将Qt作为Symbian和MeeGo唯一的应用程序开发框架。

那么人们不禁要问,Qt 是什么,为什么受到诺基亚如此重视,要将其作为自己手机平台的“唯一”开发框架?

[[17159]]
Qt

Qt为什么叫Qt,不叫OT,不叫MT呢?

我们要先追溯到上个世纪末一个关于 Qt 的鲜为人知的典故。话说在北欧挪威苦寒之地,这地方一年只有两个月的太阳,平时都是极昼,所以那边人因为晒太阳比较少,于是都是金黄的头发,蓝色的眼睛,皮肤白白黄毛特多。于是难得晒太阳就是件很享受的事情,就有两个无聊的大学生很舒服地躺在桌子上嗮太阳,正嗮得舒服,两小伙想了,闲着也是闲着,干嘛不接点私活呢,于是就去接了个给一个什么公司用 C++ 开发一个 Unix 用户界面的程序,没成想钱收得不多那公司还要求移植到别的系统别的电脑下,这两费尽千辛万苦终于捣出了一个可以跨平台的程序。

其实这程序很小,就是一个按钮,难得的是它能在好多系统下都能按,还是个C++ 的按钮,后来他们把程序放到了网上,有人觉得有意思就参与一起开发了,那会儿 IT 人士过得都很滋润啊,于是没事就做做,之后很快就发展成了一套完整的 C++ 类库。为什么大家叫它 Qt ,大概是因为很可爱,很 Cute(QT的读音)吧。

那么那两位大学生呢,时光流转,几年过去了,大学生也不再是大学生了,他们想 Qt 发展得不错了,干脆开家公司卖它吧,于是他们在奥斯陆合伙开了家公司叫 Trolltech,专门开发 Qt ,一开始不顺利,怎么也卖不出去,原来 Qt 在开源社区经过一帮牛人的锻造,整得太高级了,一般人都用不动啊,于是他们尝试将接口简化,变成傻瓜式的开发工具,这也就是 Qt 一直宣传的优点:

  1. Code Less, Create More and deploy everywhere. 

就这样,一家做医疗仪器的公司有个技术总监在初步研读了 Qt 的源码后,终于让他们卖出了***个 Qt 的商业许可证。所以啊这伟大的产品都是经过很多磨难才慢慢形成的,而且要走得长远,必须一开始就有很好的理念,看看同时期的 MFC 吧,真是气死了多少 C++ 程序员啊,先天不足,难以为继。后来还有个小插曲,当那位技术总监年老色衰被公司赶出山门,Trolltech 收留了他并奉为上宾,由此可以看到 Qt 创始人的一丝人性光辉以及能够想象得到的当年 Trolltech 和谐的公司文化。

那么由于 Qt 在开源社区走了那么一遭,与开源社区结下了不解之缘,免费开源的软件都可以免费使用 Qt ,于是 Qt 继续在开源社区发挥无限的潜力,创就了一个又一个伟大的开源软件,其中就包括了一个巨无霸,一整个图形系统的 KDE 。看到这里,聪明的人就领悟到了,Qt 还有另一个极大的优势呢,便是有众多的开源支持,使得开发更加容易。

为什么诺基亚要收购Qt?

说到这里,大家还是不明白为什么诺基亚要收购 Qt , 因为这时候 Qt 还只是在桌面平台上混,不紧不慢地发展了好几年,PDA 开始出来了,风靡一时,本着deploy everywehre 的原则,PDA 也是要跨的,于是开始开发嵌入设备版本的Qt ,在这里 Qt 又一次借助了开源社区的力量,整合了一套嵌入式的 KDE ,便是嵌入式程序员都知道的 Qtopia 。这个伟大的产品甚至从某种程度上超越了 Qt 本身,国内的老 Qt 程序员们倒有一大半是与其打交道的,其普及之广是其他嵌入式操作系统所无法企及的。于是乎正遭到 iPhone 巨大打击的手机业大哥大诺基亚便是因为 Qtopia 而对 Qt 青睐有加,正好同在北欧的挪威芬兰一家亲,收购了 Qt 一起嗮太阳,看美女。

为什么是Qt?
为什么是Qt?

那么诺基亚收购 TrollTech 之后,让 Qt 又发生了多大变化呢,说到这里,诺基亚不愧为大哥大,国际大公司,出手便是不凡,从 4.5 开始,首先完全整合了Qt 嵌入式版本,并加入了 Symbian 支持,针对 Qt 运行速度不够快的缺点大力优化底层,让 Qt 性能有了质一般的提升,提高了一倍以上的速度,同时提出了个先进的 Kinetic 的项目计划,也就是当前 4.7 里的 QtQuick ,说到这个,就要提到微软为 .net 大力打造的先进的 UI 组件 WPF 了,设计与代码分离,数据驱动式的开发,令美工与程序员可以无缝合作,这东西让微软得意了好几年。不过由笔者看来, Qt 的这个组件更加引人注目,原因有三:

◆基于 C++ 完全开源的开发模式令众多喜欢刨根问底的 C++ 开发者受益非浅,热情高涨。

◆加入了强化了的 javascript 作为动态语言契合了当前流行的开发模式,而且 javascript 这种类 C 式语法也令 C++ 程序员平滑过渡,比起其他类似 Ruby,python 之类的更加应用自如,而额外加入的数据绑定,与 C++ 扩展无缝集成等等方面比起WPF也是更加地方便易用。真正做到了快速开发而不失程序的高效。

◆由于 Qt 的跨平台性,QtQuick 在未来将有着更为广阔的应用,除了诺基亚主打的手机,平板电脑平台,QtQuick 由于脚本文件式的开发方式甚至可以用到 web 应用程序上,当真是潜力无限,笔者作为一名开发者,深深地要向 QtQuick 的设计者们致以崇高的敬意。

方才介绍了诺基亚为 Qt 带来的最重要的东西,那么还有什么呢,让笔者为您一一道来。Qt 4.5 加入了一个叫 phonon 的组件,这个东西来自 KDE 的一个开源项目,强大的开源社区又为 Qt 贡献了一个设计优良的库,在此之上开发多媒体程序只需几十行代码便可搞定,Qt 一直以来所追求的精神又一次得到了***的体现,但诺基亚的开发人员却不满足,又在 4.6 加入了一个 multimedia 的库,用以更底层的多媒体开发。真是面面俱到,令 Qt 的程序员们为之疯狂。

还有一个不得不提到的 webkit,这个在 Apple 的浏览器上大放异彩的开源浏览器引擎,Qt 理所当然地不能放过,Qt 版的 webkit 令 Qt 的开发者无论是打造自己的浏览器还是做与 web 相关的程序都只需轻轻几行代码便可做到,笔者不禁要感叹,有了 Qt ,写代码真正是变成了乐趣。

QTLive
QTLive

而在手机方面,诺基亚做得更多,一个 Mobility 的 Qt 组件正逐渐完善,它封装了诺基亚手机操作系统的底层,提供了一个统一的接口操作手机的各个方面,包括摄像头,短信,以及智能手机的各种传感器,在这方面 Qt 又超越了 google 犹抱琵琶半遮面的 Android 以及 Apple 完全封闭的 iPhone 的开发框架。所以拥有巨大开源势力支持的 Qt 的野心又岂止在诺基亚本家,Qt 有两个分支版本针对 iPhone 的 Qt-iPhone 和针对 Andriod 的 Android-Lighthouse 正在悄然无息地开发之中。

到了这里,笔者作为一名 C++ 开发者不禁要窃喜,正当 Android 选择了 java,而 iPhone 使用着 object-c ,我们借助伟大的 Qt ,必将凌驾于所有平台之上。

从过去看到现在,那么我们再展望下在诺基亚强大实力支持下的 Qt 又将有着如何辉煌的未来吧。

诺基亚已经为 Qt 设置了 Roadmap,其它全方位的支持笔者就不多说了,除了一直承诺的代码优化在开源社区的支持下会做得更好以外,下一代的 widget 将架构在 QtQuick 之上,一直认为 Qt GUI 并无新意的程序员们可以看到 Qt 的努力了。这方面 Qt 并不逊于 iPhone 和 Android 的开发框架,未来也将做得更好,这点从 QtQuick 大胆而又优秀的设计上就可以看到,Qt 将 UI 变成了一门艺术。如果你是一名 C++ 程序员,Qt 就是你梦想中的开发工具,能为你的开发效率提高何止 5 倍。而 Qt 也不仅仅属于 C++,早在诺基亚收购之前就有了java 版的接口,python 的接口等等。那么正在面对众多混乱的开发工具而迷茫无助的你,还有什么理由拒绝由诺基亚发出的 Qt 邀请?

【编辑推荐】

  1. 诺基亚发布开发框架Qt4.7 推出快速UI工具
  2. QtCreator:MeeGo开发程序入门手册
  3. Symbian和MeeGo将统一开发环境 Qt压力很大 
  4. 诺基亚发布Qt 4.6版本 支持多点触摸和手势输入
责任编辑:佚名 来源: ifanr
相关推荐

2014-07-21 12:57:25

诺基亚微软裁员

2015-11-18 14:14:11

OPNFVNFV

2014-07-30 10:55:27

2011-08-23 09:52:31

CSS

2022-11-07 14:23:35

RPA人工智能流程自动化管理

2019-08-05 10:08:25

软件操作系统程序员

2011-05-13 09:43:27

产品经理PM

2021-04-15 07:01:28

区块链分布式DLT

2015-06-11 11:10:09

对象存储云存储

2019-04-28 09:34:06

2013-11-14 16:03:23

Android设计Android Des

2016-11-08 19:19:06

2016-12-29 18:21:01

2016-12-29 13:34:04

阿尔法狗围棋计算机

2019-06-04 09:00:07

Jenkins X开源开发人员

2014-07-15 10:31:07

asyncawait

2021-06-17 07:08:19

Tapablewebpack JavaScript

2013-05-23 16:23:42

Windows Azu微软公有云

2012-05-18 16:54:21

FedoraFedora 17

2016-11-03 13:33:31

点赞
收藏

51CTO技术栈公众号