现在的位置: 首页 > 综合 > 正文

对《 一场关于Android的争论》一文的回复,不过扯的是Qt和Java

2013年09月06日 ⁄ 综合 ⁄ 共 2465字 ⁄ 字号 评论关闭

看过这篇文章
,看在此文作者几乎完全不了解Qt,难免误导读者的份上,也来说说Qt和Java在跨平台和效率上的问题。一家之见,欢迎飞砖;o

 

鉴于Qt在国内的热门程度不及Java,我觉得有必要先简单说说Qt。Qt
是一个基于C++语言的跨平台GUI框架(可以简单的视为一个跨平台的MFC,不过比MFC简单多了。类似的框架还有GTK等等),引入了一套名为“signal/slot”的对象间通信机制,并且提供了对网络、数据库、XML、WebKit、多线程、OpenGL等的支持。Qt 4甚至在06年获得
了Jolt Productivity  Award!使用Qt的知名软件包括开源项目KDE,网络电话Skype,以及Google Earth等等,而Qt也在去年被Nokia收购作为其手机的软件中间层。

 

提到跨平台
鹏凌三千

称:

而Qt则不然,比如我在Dev-
C++中以Qt生成界面,再将它编译成一个exe文件。把它放在Windows中运行,能不能用呢?当然可以。但也只局限在Windows中,因为到了
Linux平台,需要二次编译。什么叫二次编译?简单点说,就是把你的c以及cpp文件,丢到编译器里再跑一次。这时生成的文件,放在Linux下能不能
运行?能。但是,放回Windows却不行了。因为此时生成的机器码针对Linux,而不是Windows,反之亦然。

说白了,一旦你要多系统的使要Qt,你这辈子就和编译干上了。因为,你无法保证你针对的Linux平台所使用的api以及头文件等与你Qt中所使用的相对
应。比如同样一个Qt应用,同属Linux环境,你在redhat8里可能没事,到了ubuntu9或许就玩不转了,就是这个原因。除了交给用户自己编译
之外,怎样最保险呢?没办法,你在一个系统下跑,就生成一个文件,你要在六个系统下跑,那就生成六个文件……事实上,不光你用Qt开发需要编译,就连你安
装Qt运行库都需要编译,否则的话,你大有可能连Qt的设计界面跑不起来。(有些Linux版本可能内置Qt环境,但你在升级时就会发现问题了)

 



的回应:

Qt的跨平台和Java是不一样的。Java是一次编译,到处运行,本质是将Java源代码翻译成Java VM,并由其解释执行。而Qt则是一次编写,到处编译,将源代码编译成本地代码并执行。

 

如果要简单的看,那Qt就是类似于STD的类库。因此,除非你使用了非Qt的API,否则是不会产生如其所言的情况的。一个简单的例子就是,Skype提供
的Linux版本中,除了几个主流发行版的安装包外,还提供了一个原生
的二进制程序,直接就可以在各种Linux平台上运行。如果说按这位作者所言,“同样一个Qt应用,同属Linux环境,你在redhat8里可能没事,到了ubuntu9或许就玩不转了”,那人家Skype是如何实现的呢?

 

说到运行库,人家Qt官方在Linux下提供了32位
64位
两个安装包,如果需要重新编译,那我们在不同的Linux下是如何运行这两个安装包的呢?说到升级,我从Ubuntu 8.04一直用到现在的Ubuntu 9.10,期间也切换过Kubuntu和Xubuntu两个衍生版以及另一个发行版OpenSUSE 11.1,从来没有遇到任何的问题!

 

至于Windows上嘛,从Qt到KDE,都提供了统一的安装包,自然也不是问题,在此就不罗嗦了。

 

==============插一句嘴==============

 



鹏凌三千
的博文中回复到,“在ubuntu和win上重新编译还没有遇到任何的问题”;而他回复中提到,“用GNOME也能跑吧,大家快来看神人”。可见此人并不了解Ubuntu——Ubuntu本来不就是GNOME的么?!其实我现在就在Ubuntu下,一边写这篇文章,一边还开着Qt Creator的......

 

==============插嘴完毕==============

 

再往后看,鹏凌三千

对我的回复是:

我理解,我理解,你用Qt只用opengl绘图,不用与linux系统中的任何本地图形接口产生联系,理解万岁

 



的回应:

Qt还真不用和Linux的任何native图形接口联系。Linux本地的X11接口我是几乎完全不懂的......

 

如果你要问我对两种跨平台方式的看法,我会选择Qt而非Java。并非因为Java本身不优秀,而是因为Java跑起来效率
实在不行!07年时选择放弃Java,就是因为我当时用的本子只有256M的内存,跑个Java整个系统就处于崩溃的边缘,Eclipse什么的更是别想了!

 

为了跨平台,Qt的工作量仅仅是重新编译代码(就算是巨大的系统如KDE,我放在那里编译一晚上就OK了,也不碍我啥事),而Java则是以运行效率为代价。效率当然重要!作为用户,我可不愿意让自己花来买硬件的钱都被软件给白白的消耗了,更不愿意为了用某个软件而升级我的硬件,所以我的Ubuntu都是被我裁了一大堆屁用没有的软件:D

 

从开发人员的角度来看,Qt的代价是多了一晚上编译的时间;从用户的角度来看,Java的代价是资源消耗大。因此,我实在难以接受Java的跨平台方式(Vista比XP界面豪华,但资源消耗大,有多少人愿意接受呢?)。

 

最后说到开发效率
,我觉得Qt最大的劣势是缺乏类似于Eclipse那样的优秀IDE。Qt Creator虽然不错,但缺乏了重构等非常有用的功能,而且代码追踪也太原始了,确实需要极大的改进!但如果不考虑IDE,我觉得双方是差不多的。Java比C开发要快的原因在于提供了一大堆易用的类库,而Qt本身也有一大堆类,所以是不相上下的(当然双方提供的类库也是各有所长)。最后,从代码简洁的角度来看双方也差不多。

 

鹏凌三千

也提到了指针的问题。的确,指针是邪恶的,引用是美好的。当然在Qt里面一方面你可以用引用解决问题(如果引用都不会,那我真的无话可说了)。Qt同时也提供了智能指针,如QPointer等,已解决dangling pointer的问题。Qt的官方博客上甚至有篇文章
专门讨论Qt的指针。

抱歉!评论已关闭.