Qt學習之路(1):前言

轉載 http://devbean.blog.51cto.com/448512/193918

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章