http://yuanmuqiuyu2000.blog.sohu.com/101517012.html
//這位臺灣的高手把GTK+, Qt, wxWidgets比較分析得相當到位。明顯,MFC注定將淡出江湖了。
[心得] 知名 GUI lib 簡(jiǎn)評 (GTK+, Qt, wxWidgets)
之前因為把 MFC 痛罵了一頓,有網(wǎng)友在詢(xún)問(wèn)其他 GUI toolkit
所以小弟分享一下個(gè)人對三大知名圖形介面 library 的簡(jiǎn)短評論
純屬個(gè)人主觀(guān)意見(jiàn),不是業(yè)界人士,所知有限,望先進(jìn)前輩不吝指正或補充
先講 GTK+
GTK+ 主要用在 X Window 上,整個(gè)設計的架構和許多概念和 MFC 以及一般 Windows 上
的程式開(kāi)發(fā)大異其趣,入門(mén)門(mén)檻較高,而且最主要的特色是,他用不具有物件功能的純
"C" 語(yǔ)言,模擬物件導向。 所以寫(xiě)起來(lái)比較復雜艱澀,而且充滿(mǎn)大量巨集,使用和除錯
都不是很容易,但優(yōu)點(diǎn)則是可以用 C,不需 C++,如果和 Win32 SDK 比較,不會(huì )難學(xué)
多少,缺點(diǎn)是不易上手使用,而且文件比較缺,架構又非常復雜,且提供的東西比起其他
無(wú)所不包的 library,是簡(jiǎn)陋了一點(diǎn),函數命名又臭又長(cháng)。 對於簡(jiǎn)單的程式,GTK+ 會(huì )
顯得太復雜,但是當你開(kāi)始想擴充其他 library 也都沒(méi)提供的進(jìn)階功能,就會(huì )開(kāi)始贊嘆
GTK+ 的架構嚴謹,還有超乎想像的高度彈性。 同樣的東西要用 MFC 來(lái)做反而會(huì )要人命
并且多國語(yǔ)言的支援良好,內部也全面使用 UTF-8,相容性好,又是 unicode
能夠習慣的話(huà),GTK+ 值得推薦,但沒(méi)有很建議學(xué),畢竟不好學(xué),要用到熟會(huì )需要比
較久,而且那樣很多 C++ 的功能會(huì )用不到。 GTK+ 有 C++ 版本叫做 GTK--,沒(méi)用過(guò)
但看文件覺(jué)得,并沒(méi)有比 gtk+ 簡(jiǎn)單到哪里去。 因為 gtk+ 本來(lái)就是物件導向,所以
即使換了 c++ 語(yǔ)言,寫(xiě)起來(lái)架構還是差不多的。 另外,gtk+ 有 Windows 版本,但缺
點(diǎn)是,執行緩慢,不穩定,而且介面是使用 gtk+ 自己的,不是使用 Windows 內建的
"Native" 原生圖形介面,看起來(lái)會(huì )不太習慣。 Mac OS X 下可用 X11 來(lái)執行 gtk+
但那樣出來(lái)的程式是長(cháng)得像 UNIX 程式,而不是美美的 OS X Aqua 外觀(guān)
wxWidgets 和 MFC 最接近,命名習慣或架構都高度相似,會(huì ) MFC 幾乎不用重新學(xué)習
有十余年歷史,此外,他的物件封裝比 MFC 要好,提供的功能也多上太多,又跨平臺
一般知名的 MFC 程式都會(huì )選擇用 wxWidgets 改寫(xiě),來(lái)快速移植原程式到其他平臺
例如 eMule 用 wxWidgets 移植出 aMule, xMule, 還在開(kāi)發(fā)中的 Filezilla 3...等
而他最主要的特色是,他是"跨平臺"的 "Native" GUI toolkit,在各種平臺上都可寫(xiě)出
使用該平臺內建 Native 原生圖形介面的程式。 在 Windows 上就長(cháng)得跟其他 Windows
程式一樣,在 Linux 下就使用 gtk+ 的圖形介面,在 Mac OS X 下就可以使用華麗的
Aqua 外觀(guān)風(fēng)格,這點(diǎn)是非常強悍。 不像 gtk+ 到其他系統都還是只能用 gtk+ 自己的
缺點(diǎn)是,中文支援在有些地方會(huì )出問(wèn)題,例如剪貼簿的操作。 得自己 patch
但仍然相當推薦,即使是個(gè)龐大的 library,效能依舊不會(huì )太差,尤其在 Windows 上
執行速度并不輸 MFC,與其學(xué) MFC,不如學(xué) wxWidgets。
Qt 的功能,應該是這三者加上 MFC 之中最強大的,文件也很完整,又有 RAD 工具
可以輔助開(kāi)發(fā),并且有商業(yè)公司做強力后盾。不但有 Windows/X Window/Mac 版本,
甚至還有嵌入式系統可用的版本,穩定性還不錯,物件封裝也算良好,資源比 GTK+ 或
wxWidgets 多得非常多,而且發(fā)行公司提供了相當多范例,算是一家以開(kāi)放原始碼成功
營(yíng)利的模范公司。 知名的 KDE 整個(gè)是用他開(kāi)發(fā),證明了他的穩定性和強大功能。
缺點(diǎn)是如果你用他開(kāi)發(fā)非 GPL 開(kāi)放程式碼的軟體,必須以極昂貴的金額,購買(mǎi)商業(yè)
版本。 而他的圖形介面并不完全是 "Native GUI",只是透過(guò) theme 去模擬系統上的
標準 GUI,所以看起來(lái)很像,卻會(huì )有些地方可以明顯看出破綻。 執行速度緩慢還有過(guò)於
龐大則是另一個(gè)問(wèn)題。 雖然封裝得很良好文件也齊全,并不代表他就很容易學(xué)
還有一個(gè)嚴重問(wèn)題是,他寫(xiě)的不是標準 C++,他使用的 signal/slot 機制必須透過(guò) Qt
提供的 preprocessor 處理過(guò)才可以轉送給編譯器,這部份可能被限定用 qmake,算是
一個(gè)可惜的地方,不過(guò)瑕不掩瑜,還是很推薦。忘了說(shuō),他內部也是 unicode,
多國語(yǔ)言沒(méi)問(wèn)題。
以上三套只是簡(jiǎn)單介紹,其中 Qt 的程式我沒(méi)有實(shí)際完整開(kāi)發(fā)過(guò),但明顯的三套都遠遠比
只能在 Windows 上用,功能少 Bug 多難學(xué)難用幾乎無(wú)多國語(yǔ)言支援的 MFC 要強。
三套可跨平臺的 library 大家可自行選擇,只能用在 Windows 的 MFC 就不用考慮了
wxWidgets 內帶 wxodbc,可惜 wxd 目前并沒(méi)有包裝它。
總結:wxWidgets性能及ui最好,Qt最大最全,GTK+架構及擴展性最好
聯(lián)系客服