圖形界面庫Windows Forms、 MFC、WTL、WxWidgets、Qt、GTK 綜合比較

圖形界面庫Windows Forms、 MFC、WTL、 WxWidgets、Qt、GTK 綜合比較見下表:


總結:

       GTK+主要用在X Window上,整個設計的架構和許多概念和MFC以及一般 Windows 上的程序開發大異其趣,入門門檻較高,而且最主要的特色是,它用不具有物件功能的純C 語言,模擬物件導向。所以寫起來比較複雜艱澀,而且充滿大量巨集,使用和除錯都不是很容易,但優點則是可以用C,不需C++,如果和Win32 SDK比較,不會難學多少,缺點是不易上手使用,而且文件比較缺,架構又非常複雜,且提供的東西比起其它無所不包的 library,是簡陋了一點,函數命名又臭又長。

       對於簡單的程序,GTK+會顯得太複雜,但是當你開始想擴充其它library也都沒提供的進階功能,就會開始讚歎GTK+ 的架構嚴謹,還有超乎想像的高度彈性。同樣的東西要用 MFC來做反而會要人命,並且多國語言的支持良好,內部也全面使用UTF-8,相容性好,要是unicode能夠習慣的話,GTK+值得推薦,但不建議學,畢竟不好學,要用到熟會需要比較久,而且那樣很多C++的功能會用不到。GTK+有C++版本叫做GTK–,沒用過但看文件覺得,並沒有比gtk+簡單到哪裏去。 因爲 gtk+本來就是物件導向,所以即使換了c++ 語言,寫起來架構還是差不多的。

另外,gtk+有Windows 版本,但缺點是,執行緩慢,不穩定,而且介面是使用gtk+自己的,不是使用 Windows 內建的Native原生圖形介面,看起來會不太習慣。 Mac OS X 下可用 X11 來執行gtk+,但那樣出來的程式是長得像 UNIX 程序,而不是美美的OS X Aqua外觀。

       wxWidgets和MFC最接近,已有十餘年曆史,命名習慣或架構都高度相似,會MFC幾乎不用重新學習。此外,它的物件封裝比MFC要好,提供的功能也多上太多,又跨平臺。一般知名的MFC程式都會選擇用wxWidgets改寫,來快速移植原程式到其它平臺,例如 eMule用wxWidgets移植出aMule,xMule, 還有在開發中的Filezilla 3…等。而它最主要的特色是,它是跨平臺的Native GUI toolkit,在各種平臺上都可寫出使用該平臺內建Native原生圖形介面的程式。在Windows 上就長得跟其它Windows程式一樣,在 Linux 下就使用 gtk+的圖形介面,在 Mac OS X 下就可以使用華麗的Aqua 外觀風格,這點是非常強悍。 不像gtk+到其它系統都還是隻能用gtk+自己,缺點是,中文支持在有些地方會出問題,例如剪貼簿的操作,得自己patch,但仍然相當推薦,即使是個龐大的library,效能依舊不會太差,尤其在 Windows 上執行速度並不輸 MFC,與其學MFC,不如學wxWidgets。

       WTL個用來開發 Windows 應用程序的 C++ 的 UI 組件,它擴展了 ATL (Active Template Library) 提供了一系列的對話框、幀、GDI對象等等。我們使用的的金山衛士就是用WTL開發的....。

       以下引自《WTL for MFC Programmers 》“WTL 具有兩面性,它沒有MFC的界面(GUI)類庫那樣功能強大,但是能夠生成很小的可執行文件。如果你象我一樣使用MFC進行界面編程,你會覺得MFC提供的界面控件封裝使用起來非常舒服,更不用說MFC內置的消息處理機制。當然,如果你也象我一樣不希望自己的程序僅僅因爲使用了MFC的框架就增加幾百K的大小的話,WTL就是你的選擇。

       QT的功能,應該是這三者加上MFC之中最強大的,文件也很完整,又有 RAD 工具可以輔助開發,並且有商業公司做強力後盾(不過又易主了)。不但有 Windows/X Window/Mac 版本,甚至還有嵌入式系統可用的版本,穩定性還不錯,物件封裝也算良好,資源比 GTK+ 或 wxWidgets 多得非常多,而且發行公司提供了相當多範例,算是一家以開放原始碼成功營利的模範公司。 知名的 KDE 整個是用它開發,還有 WPS Linux 版也是用它開發的,證明了它的穩定性和強大功能。缺點是如果你用它開發非 GPL 開放程序碼的軟件,必須以極昂貴的金額購買商業版本。而它的圖形介面並不完全是 Native GUI,只是透過theme 去模擬系統上的標準 GUI,所以看起來很像,卻會有些地方可以明顯看出破綻。運行速度在 Windows 下比 MFC 的慢和過於龐大則是另一個問題。

       雖然封裝得很好文件也齊全,並不代表它就很容易學。還有一個嚴重問題是,它寫的不是標準 C++,它使用的 signal/slot 機制必須透過 Qt 提供的preprocessor 處理過纔可以轉送給編譯器,這部份可能被限定用 qmake,算是一個可惜的地方,不過瑕不掩瑜,還是很推薦。忘了說,它內部也是unicode,多國語言沒問題。


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