Qt 學(xué)習(xí)之路

2018-10-04 09:58 更新

Qt 學(xué)習(xí)之路

Qt 是一個(gè)著名的 C++ 庫(kù)——或許并不能說這只是一個(gè) GUI 庫(kù),因?yàn)?Qt 十分龐大,并不僅僅是 GUI。使用 Qt,在一定程序上你獲得的是一個(gè)“一站式”的服務(wù):不再需要研究 STL,不再需要 C++ 的string,因?yàn)镼t有它自己的 QString 等等?;蛟S這樣說很偏激,但 Qt 確實(shí)是一個(gè)“偉大的 C++ 庫(kù)”。

我們所使用的 Qt,確切地說也就是它的 GUI 編程部分。C++ 的 GUI 編程同 Java 不同:GUI 并不是 C++ 標(biāo)準(zhǔn)的一部分。所以,如果使用 Java,那么你最好的選擇就是 AWT/Swing,或者也可以使SWT/JFace,但是,C++ 的 GUI 編程給了你更多的選擇:wxWidget, gtk++ 以及 Qt。這幾個(gè)庫(kù)我都有接觸,但是接觸都不是很多,只能靠一些資料和自己的一點(diǎn)粗淺的認(rèn)識(shí)說一下它們之間的區(qū)別(PS: 更詳盡的比較在前面的文章中有)。

wxWidget

首先說 wxWidget,這是一個(gè)標(biāo)準(zhǔn)的 C++ 庫(kù),和 Qt 一樣龐大。它的語法看上去和 MFC 類似,有大量的宏。據(jù)說,一個(gè) MFC 程序員可以很容易的轉(zhuǎn)換到 wxWidget 上面來。wxWidget 有一個(gè)很大的優(yōu)點(diǎn),就是它的界面都是原生風(fēng)格的。這是其他的庫(kù)所不能做到的。wxWidget 的運(yùn)行效率很高,據(jù)說在Windows 平臺(tái)上比起微軟自家的 MFC 也不相上下。

gtk++

gtk++ 其實(shí)是一個(gè) C 庫(kù),不過由于 C++ 和 C 之間的關(guān)系,這點(diǎn)并沒有很大的關(guān)系。但是,gtk++ 是一個(gè)使用 C 語言很優(yōu)雅的實(shí)現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的范例。不過,這也同樣帶來了一個(gè)問題——它的里面帶有大量的類型轉(zhuǎn)換的宏來模擬多態(tài),并且它的函數(shù)名“又臭又長(zhǎng)(不過這點(diǎn)我倒是覺得無所謂,因?yàn)樗暮瘮?shù)名雖然很長(zhǎng),但是同樣很清晰)”,使用下劃線分割單詞,看上去和 Linux 如出一轍。由于它是 C 語言實(shí)現(xiàn),因此它的運(yùn)行效率當(dāng)然不在話下。gtk++ 并不是模擬的原生界面,而有它自己的風(fēng)格,所以有時(shí)候就會(huì)和操作系統(tǒng)的界面顯得格格不入。

Qt

再來看 Qt,和 wxWidget 一樣,它也是一個(gè)標(biāo)準(zhǔn)的 C++ 庫(kù)。但是它的語法很類似于 Java 的Swing,十分清晰,而且 SIGNAL/SLOT 機(jī)制使得程序看起來很明白——這也是我首先選擇 Qt 的一個(gè)很重要的方面,因?yàn)槲沂菍W(xué) Java 出身的 :) 。不過,所謂“成也蕭何,敗也蕭何”,這種機(jī)制雖然很清楚,但是它所帶來的后果是你需要使用 Qt 的 qmake 對(duì)程序進(jìn)行預(yù)處理,才能夠再使用 make 或者nmake 進(jìn)行編譯。并且它的界面也不是原生風(fēng)格的,盡管 Qt 使用 style 機(jī)制十分巧妙的模擬了本地界面。另外值得一提的是,Qt 不僅僅運(yùn)行在桌面環(huán)境中,Qt 已經(jīng)被 Nokia 收購(gòu),它現(xiàn)在已經(jīng)會(huì)成為Symbian 系列的主要界面技術(shù)—— Qt 是能夠運(yùn)行于嵌入式平臺(tái)的。

以往人們對(duì) Qt 的授權(quán)多有詬病。因?yàn)?Qt 的商業(yè)版本價(jià)格不菲,開源版本使用的是 GPL 協(xié)議。但是現(xiàn)在 Qt 的開源協(xié)議已經(jīng)變成 LGPL。這意味著,你可以將 Qt 作為一個(gè)庫(kù)連接到一個(gè)閉源軟件里面??梢哉f,現(xiàn)在的 Qt 協(xié)議的爭(zhēng)議已經(jīng)不存在了——因?yàn)?wxWidgets 或者 gtk+ 同樣使用的是類似的協(xié)議發(fā)布的。

在本系列文章中,我們將使用 Qt4 進(jìn)行 C++ GUI 的開發(fā)。我是參照著《C++ GUI Programming with Qt4》一書進(jìn)行學(xué)習(xí)的。其實(shí),我也只是初學(xué) Qt4,在這里將這個(gè)學(xué)習(xí)筆記記下來,希望能夠方便更多的朋友學(xué)習(xí) Qt4。我是一個(gè) Java 程序員,感覺 Qt4 的一些命名規(guī)范以及約束同 Java 有異曲同工之妙,因而從 Java 遷移到 Qt4 似乎困難不大。不過,這也主要是因?yàn)?Qt4 良好的設(shè)計(jì)等等。

閑話少說,還是盡快開始下面的學(xué)習(xí)吧!

致謝:“豆子空間” 博客 http://devbean.blog.51cto.com/448512/193918

更新日期更新內(nèi)容
2015-07-23Qt 學(xué)習(xí)之路
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)