zoukankan      html  css  js  c++  java
  • 【转】QT概述2跨平台的GUI Framework:Qt(C/C++)

    跨平台的GUI Framework : Qt (C/C++)

    来源于:http://www.cnblogs.com/oomusou/archive/2006/10/14/528689.aspx

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

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

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

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

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

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

     

  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/ainima/p/6332030.html
Copyright © 2011-2022 走看看