Qt是一個著名的C++庫——或許並不能說這只是一個GUI庫,因為Qt十分龐大,並不僅僅是GUI。使用Qt,在一定程序上你獲得的是一個“一站式”的服務:不再需要研究STL,不再需要C++的<string>,因為Qt有它自己的QString等等。或許這樣說很偏激,但Qt確實是一個“偉大的C++庫”。
我們所使用的Qt,確切地說也就是它的GUI編程部分。C++的GUI編程同Java不同:GUI並不是C++標准的一部分。所以,如果使用Java,那麼你最好的選擇就是AWT/Swing,或者也可以使SWT/JFace,但是,C++的GUI編程給了你更多的選擇:wxWidget, gtk++以及Qt。這幾個庫我都有接觸,但是接觸都不是很多,只能靠一些資料和自己的一點粗淺的認識說一下它們之間的區別(PS: 更詳盡的比較在前面的文章中有)。
首先說wxWidget,這是一個標准的C++庫,和Qt一樣龐大。它的語法看上去和MFC類似,有大量的宏。據說,一個MFC程序員可以很容易的轉換到wxWidget上面來。wxWidget有一個很大的優點,就是它的界面都是原生風格的。這是其他的庫所不能做到的。wxWidget的運行效率很高,據說在Windows平台上比起微軟自家的MFC也不相上下。
gtk++其實是一個C庫,不過由於C++和C之間的關系,這點並沒有很大的關系。但是,gtk++是一個使用C語言很優雅的實現了面向對象程序設計的范例。不過,這也同樣帶來了一個問題——它的裡面帶有大量的類型轉換的宏來模擬多態,並且它的函數名“又臭又長(不過這點我倒是覺得無所謂,因為它的函數名雖然很長,但是同樣很清晰)”,使用下劃線分割單詞,看上去和Linux如出一轍。由於它是C語言實現,因此它的運行效率當然不在話下。gtk++並不是模擬的原生界面,而有它自己的風格,所以有時候就會和操作系統的界面顯得格格不入。
再來看Qt,和wxWidget一樣,它也是一個標准的C++庫。但是它的語法很類似於Java的Swing,十分清晰,而且SIGNAL/SLOT機制使得程序看起來很明白——這也是我首先選擇Qt的一個很重要的方面,因為我是學Java出身的 :) 。不過,所謂“成也蕭何,敗也蕭何”,這種機制雖然很清楚,但是它所帶來的後果是你需要使用Qt的qmake對程序進行預處理,才能夠再使用make或者nmake進行編譯。並且它的界面也不是原生風格的,盡管Qt使用style機制十分巧妙的模擬了本地界面。另外值得一提的是,Qt不僅僅運行在桌面環境中,Qt已經被Nokia收購,它現在已經會成為Symbian系列的主要界面技術——Qt是能夠運行於嵌入式平台的。
以往人們對Qt的授權多有诟病。因為Qt的商業版本價格不菲,開源版本使用的是GPL協議。但是現在Qt的開源協議已經變成LGPL。這意味著,你可以將Qt作為一個庫連接到一個閉源軟件裡面。可以說,現在的Qt協議的爭議已經不存在了——因為wxWidgets或者gtk+同樣使用的是類似的協議發布的。
在本系列文章中,我們將使用Qt4進行C++ GUI的開發。我是參照著《C++ GUI Programming with Qt4》一書進行學習的。其實,我也只是初學Qt4,在這裡將這個學習筆記記下來,希望能夠方便更多的朋友學習Qt4。我是一個Java程序員,感覺Qt4的一些命名規范以及約束同Java有異曲同工之妙,因而從Java遷移到Qt4似乎困難不大。不過,這也主要是因為Qt4良好的設計等等。
閒話少說,還是盡快開始下面的學習吧!
本文出自 “豆子空間” 博客,請務必保留此出處http://devbean.blog.51cto.com/448512/193918