阅读更多

13顶
0踩

移动开发

转载新闻 【iShout】Qt 的昨天,今天,明天

2010-11-25 12:56 by 见习编辑 theone 评论(6) 有6629人浏览
本文的作者 toartist 是一名 Qt 开发者,非常了解 Qt 的版本历史和演进,ifanr 邀请到他写了一篇 Qt 的回顾和展望文章。此外,作者也将参与诺基亚开发竞赛,一起期待他的作品在 N8 上有出色的表现吧。


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

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

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

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

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

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

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 一起嗮太阳,看美女。


那么诺基亚收购 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 ,写代码真正是变成了乐趣。




而在手机方面,诺基亚做得更多,一个 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 邀请?
  • 大小: 30.5 KB
  • 大小: 48 KB
  • 大小: 62 KB
来自: www.ifanr.com
13
0
评论 共 6 条 请登录后发表评论
6 楼 jamiesun 2010-12-14 15:12
ray_linn 写道
QT做为手机界面开发工具,过于重了,手机需要的是类似Microsoft的HTA技术这么简单的东西,这个概念被apple所抄袭,被Microsoft再次发展(Silverlight)

啥叫重了,如果你去看看qt新推出的Qt quick特性,你就知道android的java和Qt quick相比那才是重了。

5 楼 ray_linn 2010-11-25 21:31
QT做为手机界面开发工具,过于重了,手机需要的是类似Microsoft的HTA技术这么简单的东西,这个概念被apple所抄袭,被Microsoft再次发展(Silverlight)
4 楼 df20070608 2010-11-25 18:17
支持!!!
3 楼 zyl小星星 2010-11-25 17:07
支持!!!
2 楼 diggywang 2010-11-25 16:46
让我想起了又爱又恨的Swing
1 楼 lpali 2010-11-25 14:58
强大,支持qt

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • ishout_card

    ishout_card

  • 【iShout】智能家居,我们真的想好怎么做了吗?

    每一股新的浪潮都会催生出一批伟大的公司,这一次也不例外,对于我们今天的从业者来说,能赶上这样的浪潮是一种幸运。 智能家居,一场猝不及防的遭遇战 从上面的图中我们可以看出,网络化攻陷计算机领域,...

  • 高级开发必须理解的Java中SPI机制

    ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 代码输出: wang wang miao miao 4 原理解析 首先看ServiceLoader类的签名类的...

  • 代理&SPI相关-这一篇全了解

    ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 代码输出: wang wang miao miao SPI有哪些应用场景? 解: 概括地说,...

  • Java中的ClassLoader和SPI机制

    ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } System.out.println("Thread "+Thread.currentThread().getName()+" classloader: "+Thread....

  • 面向对象三大特性 之 多态(C#)

     今天和勇霞在路上走着讨论了一个问题,什么是"多态".通过讨论得出一个令人震惊的结论,那就是"多态我真的不懂你".学习过程中最大的悲哀莫过于明明是不懂却始终觉得自己很清楚,很明白,我理解,我懂得.很庆幸,因为知道...

  • django-realtime:Django实时

    Django-Realtime:Django的iShout.js客户端。 iShout.js是一个node.js + socket.io服务器,用于向您现有的Web应用程序添加实时通知。 该项目为Django添加了轻松的iShout.js集成,从而使您可以轻松地向退出的Django...

  • 聊聊JavaSPI

    } } // New create folder like this resources/META-INF/services/javacore.spi.IShout 文件:javacore.spi.IShout 内容:需要注册的接口实现类如: javacore.spi.Dog javacore.spi.Cat // main run import java....

  • SPI(Service Provider Interface)机制

    } } 步骤2 、在 src/main/resources/ 下建立 /META-INF/services 目录, 新增一个以接口命名的文件 (org.foo.demo.IShout文件),内容是要应用的实现类(这里是org.foo.demo.animal.Dog和org.foo.demo.animal.Cat,...

  • java spi机制

    public class SPIMain { public static void main(String[] args) { ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 代码输出: wang wang miao ...

  • Java的SPI机制分析

    public class SPIMain { public static void main(String[] args) { ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 代码输出: wang wang miao ...

  • Java中的SPI机制

    SPI机制简介 2.Java的SPI机制 之前开阿里的HSF框架,里面用到了Java的SPI机制,今天闲暇的时候去了解了一下,通过写博客来记录一下 SPI的全名为Service Provider Interface,我对于该机制的理解是为接口寻找服务实现...

  • 必须理解的Java中SPI机制

    } } 步骤2、在 src/main/resources/ 下建立 /META-INF/services 目录, 新增一个以接口命名的文件 (org.foo.demo.IShout文件),内容是要应用的实现类(这里是org.foo.demo.animal.Dog和org.foo.demo.animal.Cat,每...

  • Java中SPI机制详解

    ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 代码输出: wang wang miao miao 五、原理解析 首先看ServiceLoader类的签名类的...

  • Java中SPI机制

    IShout { void shout ( ) ; } cat定义实现类 package com . java . spi ; public class Cat implements IShout { public void shout ( ) { System . out . println ( ...

  • Java SPI机制探究

    ServiceLoader<IShout> shouts = ServiceLoader.load(IShout.class); for (IShout s : shouts) { s.shout(); } } } 复制代码 代码输出: wang wang miao miao 复制代码 4 原理解析 首先看...

  • (源码)基于JavaWeb的饮品销售管理系统.zip

    # 基于Java Web的饮品销售管理系统 ## 项目简介 本项目是一个基于Java Web的饮品销售管理系统,主要用于学校实训课程的作业。系统涵盖了从用户管理、商品管理、订单管理到购物车管理的全套功能,旨在提供一个完整的在线饮品销售解决方案。 ## 项目的主要特性和功能 ### 用户管理 用户注册与登录支持用户注册新账号和登录系统。 用户信息管理包括用户信息的查询、修改和删除。 用户类型管理区分不同类型的用户(如管理员、普通用户)。 ### 商品管理 商品CRUD操作支持商品的添加、修改、删除和查询。 商品分类管理支持多级商品分类的查询和管理。 商品分页查询支持按页查询商品信息,提高查询效率。 ### 订单管理 订单CRUD操作支持订单的创建、修改、删除和查询。 订单明细管理支持订单明细的添加和管理。 订单状态管理支持订单状态的更新和查询。 ### 购物车管理

  • BitmapFunc.rar

    BitmapFunc

  • c++课程设计-产品入库管理操作系统.zip

    c++课程设计-产品入库管理操作系统

  • c语言火车票订票管理源码.rar

    c语言火车票订票管理源码

Global site tag (gtag.js) - Google Analytics