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良好的設計等等。 閒話少說,仍是儘快開始下面的學習吧!