跨平台的GUI Framework : Qt

转载 2007年09月26日 09:35:00

跨平台是程序设计师长久的梦想,谁都想要程序只写一次,就能在各种平台执行,Java当初就是以『Write once, run every where.』打响知名度,因此号称是终极程序语言,也吸引了很多人头向Java阵营。Java以语言角度算是不错的语言,语法干净简洁,OO支持也算完 整,Framework设计的也不错,写出来的程序语法也蛮漂亮的,还Open Source,且支持应用很广,从GUI、Component、Web、Embedded都有支持,但Java技术最大的致命伤就是执行速度缓慢,透过 Virtual Machine技术使得Java得以实现跨平台,什么是Virtual Machine呢?简单的说,就是在给个OS上在装一个JavaOS跑Java程序,这种方式就像你写了一个Windows程序,然后也宣称是跨平台,只 要User在Linux或Mac装上VMWare,然后在VMWare下灌Windows XP,这样也能在Linux、Mac下执行你的Windows程序,但经验告诉我们,用VMWare跑其它OS,速度大约只剩下6成左右而已,Java程 序速度慢的原因就在这里,这是Virtual Machine的宿命。


C/C++的哲学就不一样了,C/C++强调的是『Write once, compile every where.』,同一份程序代码,只要在该平台重新Compile成该平台的执行档,就能在该平台执行,若文字模式下的程序,的确可以跨平台,程序完全不 需修改,但GUI盛行以后,由于各GUI的Library都不一样且没有标准,所以GUI程序并没办法跨平台Compile,因为各平台都有专属的 Library。但是C/C++优势就是执行速度快,若能解决GUI Library的问题,则跨平台即可解决。


除了GUI Library需要统一外,还得看该Library设计的好不好才行,Linux GUI我没写过就不说了,若在Windows平台,Borland的C++ Builder使用Delphi的VCL Library,Microsoft的Visual C++可以用MFC和.NET Framework,首先来看Borland的C++ Builder,它使用标准的ANSI C++语言开发,利用VCL写出来的程序也算蛮漂亮的,执行速度很快,比较麻烦的是C++ Builder当初为了缩短上市时间,并没有设计自己的Library,而是藉用Delphi的Library,导致C++ Builder在Compile时,是先用Delphi的Compiler将VCL compile成object file后,再用C++ Builder将你写的C++程序compile成object file,最后再用Linker将所有的object file link起来,由于这都是IDE在做,对程序设计师似乎影响不大,但VCL由于是Delphi的Library,所以若想深入研究VCL的source code时,则必须学Delphi的Pascal才行,否则看不懂VCL source code,这也是很多人对C++ Builder却步的原因。


再来看Microsoft的Visual C++,MFC用的是完整的ANSI C++语言,所以语言部分不是问题,但若你看过用MFC写的程序,你一定会惊讶为什么这么复杂,程序代码非常冗长不好看,且MFC是有名的喃学,若 Visual C++搭配.NET Framrwork,则无法使用ANSI C++,得用其.NET平台版本的C++/CLI,相信这点很多人就有意见了,不过.NET Framework由于设计的不错,所以写出来的程序相当精简漂亮,感觉和C++ Builder差不多,不过无论是C++ Builder或Visual C++开发的GUI,所开发出来的程序都无法跨平台,当然也无法跨平台Compile。


之前曾在博客员的C++ Blog看到有人在讨论Qt,一个跨平台GUI的Framework,当初我以为只是另外一个走Virtual Machine技术的产物,只不过使用C/C++为语言而已,所以当时也没特别注意,今天下课到天珑书局逛逛,看到有Qt的原文书,就顺手翻了一下,我才 发现跟我原本想象的完全不一样。


Qt拥有一个单一的Library,让你开发各种不同平台的程序,目前支持Windows、Linux、Mac、UNIX、 Embedded Linux,讲白话点,就是它提供了一个Library让你开发GUI程序,写好之后,只要在各平台重新Compile后,就可以在各平台执行,而且使用 完整的ANSI C++语言,且不限Compiler,只要是C++的Compiler都可以,重要的是,该Library相当漂亮,写出来的程序很像C++ Builder或.NET Framework的那样精简,不会向MFC那样复杂。目前Qt已经到第四个版本,GUI部分算支持的相当完整,且支持数据库、XML、Multi- Thread、Socket等方面的programming,看到这些特色,我毫不犹豫就买了一本讨论Qt的书来研究了,这几乎是我多年来的理想,若以 OO角度来说,无论后端是什么数据库,只要透过相同的Interface,不同数据库的Class来实做这个Interface,前端GUI的程序写法完 全不用改变,同理,面对不同的OS,理论上只要透过相同的Interface,不同OS的Class各自实做这个Interface,前端GUI的程序也 完全不用改变,最后只要靠Compiler将程序compile成各平台的原生程序即可,这样即可保证其执行速度,不用再靠Virtual Machine。但很可惜这个理想,这么多年来都没人可以做出来,或许是我孤陋寡闻吧,书上说Qt 3曾在2002年得过Jolt的Productivity Award,Jolt是相当有名的奖,能只写一次程序就能跨平台,且保证其执行速度,当然会大大提升Productivity了,我最近会玩一下Qt,看 看Qt是否适合开发大型应用程序,假如Qt适合的话,Qt无疑才是GUI终极解决方案,有强力的ANSI C/C++语言背书,又有单一的GUI Library,且精简漂亮,又能Compile成各平台的原生执行档,几乎是最完美的解决方案了,剩下只是看其好用不好用而已。C/C++技术还有什么 遗憾吗?就是Web,目前还没看到C/C++可以开发Web Application的技术,Microsoft也宣称短期之内不会让ASP.NET支持C++/CLI,若以技术而言,GUI的Library绝对比 Web的Library难度高,因为得面对各平台API的实做,而Web只要吐出HTML即可,不过既然Qt对最难的GUI都能解决了,相信C/C++在 Web有统一的Library应该也是指日可待了。

 

几种跨平台cpp gui研发工具对比

wx: I donot like wxwidget, although it's a cross-platform GUI develop tool. The reason is wxwid...
  • anzhuangguai
  • anzhuangguai
  • 2015年10月16日 13:42
  • 917

跨平台 GUI 的三种实现策略.md

跨平台 GUI 的三种实现策略
  • hejiero
  • hejiero
  • 2016年03月10日 16:19
  • 354

如何开发跨平台GUI程序 (原创)

如何开发跨平台GUI程序作者:沈仁注:欢迎转载原创作品。请保留作者和出处(沈仁)blog.csdn.net/snleo本文主要介绍如何使用gtk和dev-c++ 来开发跨平台GUI程序。针对大多读者没...
  • snleo
  • snleo
  • 2005年07月27日 23:32
  • 3242

使用QT做跨平台编程

前两周,各种课程设计和实验,各种团队活动占据了我几乎所有的时间,睡觉都没啥时间,更不用说写博客了。 今天下午刚刚投出高频课设的PCB,暂时得以清闲,赶紧来写写博客,待我整理完微机原理的课设,后面的课设...
  • tankery
  • tankery
  • 2011年01月10日 21:28
  • 5789

专访安晓辉:Qt是最佳的跨平台解决方案

从技术支持中途转战软件开发,如今从事编程工作已十多有余,2014年CSDN博文大赛编程语言组冠军、CSDN Qt论坛的版主安晓辉老师从今天开始,坐镇CSDN社区问答栏目的 第十四期,届时会接受广大网友...
  • pants4123
  • pants4123
  • 2016年05月09日 01:07
  • 924

Qt 和MFC对比及Qt跨平台优势

一.Qt的优势: 1.跨平台 2.signal-slot机制太漂亮了,与MFC相比,其非窗体类也支持该机制,这点设计者的想法让人佩服,并且由于其非窗体类也支持该机制,所以其很多用法让人感觉眼前一...
  • dch4890164
  • dch4890164
  • 2011年03月14日 17:07
  • 13911

Qt跨平台开发环境搭建

Qt跨平台开发环境搭建   1.     背景介绍 Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者丰富的图形用户界面所需的所有功能。而且,Qt很容易扩展,并且允许真...
  • hotdog156351
  • hotdog156351
  • 2015年10月25日 16:00
  • 2370

juce: 跨平台的C++用户界面库

如果你用过QT和MFC,那你必然知道QT是基于C++的跨平台库,而MFC是微软针对widows平台推出来基础类库。且不论MFC的设计如何,从我个人和身边朋友的经历来看,MFC是一些非常难以理解的类的组...
  • ranchlai
  • ranchlai
  • 2013年09月02日 23:36
  • 3429

几款开源的图形界面库(GUI Libraries)

SmartWin++  遵循BSD许可协议的C++ GUI库,建立在Windows API之上,但仍可以通过使用WineLib在Linux/xNix上使用。也支持Pocket PC和基于Wind...
  • educast
  • educast
  • 2014年05月07日 15:56
  • 3790

Qt的跨平台绘图系统

总结:Qt的跨平台绘图系统   Qt跨平台GUI在各个平台上实现的一致性,主要是因为它的GUI实现并不依赖与任何本地GUI底层,而是使用自己的跨平台绘图系统来进行GUI的绘制与显示。...
  • chinabinlang
  • chinabinlang
  • 2013年12月02日 09:58
  • 1071
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跨平台的GUI Framework : Qt
举报原因:
原因补充:

(最多只允许输入30个字)