GTK+
● GTK+本來是Gimp的一個工具庫,是在LGPL協議下發布的Unix系統GUI庫;
● GTK+已經被移植到Windows,VMS以及其餘的系統上面(在MacOS X上面如今能夠經過蘋果的X11應用程序實現,其本地版本正在開發之中),使用相同的API。可是,GTK+的設計初衷是Unix,多平臺的開發是後來才加入的;
● GTK+是GNOME用戶界面的原始構建庫;
● GTK+的API被很好的設計過,包含了安全類型轉換和其餘的一些機制,可是C++語言已經內建了這些;
● GTK+構建在glib庫之上,這是一個通用庫(在某些方面相似於C++的STL,它提供了一些數據結構,以及一些幫助內存管理的函數等);
● 在不一樣平臺具備相對一致的界面,除了Windows XP,在XP系統中,GTK+嘗試使用Wimp外觀(基於UxTheme)來模擬Windows本地界面,得到了必定的成功。可是,它依然是一個Unix庫;
● 既然wxWidgets在Unix上使用GTK(或是GTK2),也就沒有什麼理由在wxWidgets之上構建跨平臺的C++程序了。
Kylix
● Kylix是Borland/Inprise的一個不成功的產品,因此很難說它還會繼續被支持多久;
● Kylix基於Qt構建;
● Kylix僅支持爲數很少的平臺;
● Kylix的IDE使用了很多於三個庫,而且很不專業。
Lazarus
● Lazarus是一個跨平臺的開源RAD IDE,也是一個編寫GUI程序的庫;
● Lazarus不少地方與Borland Delphi兼容,相同的代碼能夠被這兩個編譯器編譯;
● Lazarus有爲本地使用或者客戶端/服務器的數據庫應用的數據展現組件;
● Lazarus僅支持Object Pascal;
● 工做方式相似於wxWidgets,支持不少底層的工具集:gtk1,gtk2,win32api,qt,carbon和winCEapi;
● 底層的免費Pascal編譯器支持不少如今仍在使用的操做系統和架構;
● 如今它支持的平臺比wxWidgets少。
Ultimate++
● Ultimate++僅支持Windows和Linux,不支持MaxOS;
Notus
● 實際上存在wxWidgets ;) (豆子:原文是wxWidgets actually exists,這多是說還有更好的wxWidgets);
● Notus彷佛是要更多地使用標準庫和現代C++概念,例如遍歷器、模板、命名空間等等(相比之下,wxWidgets更多的是使用了非標準的方式);並 且它更多地是借鑑了Boost的設計理念(你能夠把它認爲是一個好的或者很差的事情),它和Boost的其餘的庫在一塊兒工做得很好。固然,既然它並不存 在,這是否是真的還得要時間的檢驗。(豆子:看看Notus的站點,好像這是庫是把泛型的概念帶入到GUI編程裏面)
MFC
● MFC僅僅可以在Windows上無償使用:
○ Visaul C++跨平臺版本有一個maxintosh版(至少要800美圓),可是自從4.1版本的編譯器就不支持了;
○ 也有一些Unix的模仿,如MainWin,至關的昂貴,須要運行時協議,而且聽說有一些有問題的支持;
● 若是一個程序使用wxWidgets或者MFC構建,而且源代碼是開放的,那麼EULA(豆子:最終用戶許可協議)是不能約束wxWidgets的;
● MFC的執行程序比wxWidgets小(基本上是靠編譯器實現體積縮小的);
● MFC擁有不少優秀的商業組件;
● 有人說,wxWidgets的事件表(event tables)要比MFC的消息映射(message map)好;
● wxWidgets的類層次結構更多合理,而MFC在頂層類名顯得不那麼一致性;
● wxWidgets提供了大量的相關的方便的工具類,而MFC提供了更多的窗口相關的類;
● 同.NET不一樣,MFC不會遷移到.NET平臺;另外一方面,wxWidgets已經有了初步的.NET版本;
● MFC提供了更多的組件,尤爲是有關數據的控件;
● 有些地方使用wxWidgets更加簡單一些,例如特定類型的窗口(如老是在最上方的窗口等),另外一些地方使用MFC會更方便,日期選擇工具條;
● 或許使用MFC最重要的一點是MSVC,這個IDE自己;
● 參見<a title="WxWidgets" for="" mfc="" programmers"="" href="http://wiki.wxwidgets.org/WxWidgets_For_MFC_Programmers" target="_blank" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(67, 67, 67); text-decoration: none; ">WxWidgets For MFC Programmers瞭解更多區別。
Mozilla Framework
● 在Mozilla程序中須要使用JavaScript、XUL和C++;而wxWidgets只使用C++;
● 在Mozilla中使用C++(XPCOM)至關困難;在wxWidgets中使用C++就簡單得多。
Tk
● Tk又稱爲:Tcl/Tk,Perl/Tk;Python/Tkinter;
● 古老的API,可是實現了基礎的功能。不少擴展提供了新的組件:著名的
BWidgets Tcl/Tk擴展提供了純Tcl編寫的
megawwidgets;
● 沒有GridView~ListView,可是有一個簡單的list;
● ComboBox是一種按鈕;
● 默認命令是雙擊,但若是你但願「單擊」或其餘事件,那也是支持的,不過你會很難發現它們;
● Python將這個庫選爲默認的,可是一些發行版(如Pardus)並無默認包含;
● 從一個組件得到返回值是經過StringVar、IntegrVar和DoubleVar類,這很使人困惑;
● 提供MaxOS X上面的本地外觀(好久以來就是如此),使用Tile擴展實現Windows XP的本地風格,其餘狀況下是Win9x的風格;
● 在X11下並不能工做得很好。事實上,它看起來有點像Motif :-( ,看一下Tile擴展,它的目標是讓Tk在X11下得到新生;
● Tk是工具命令行語言(豆子:原文是Tool Command Language)的一個擴展。這種語言是一個強大的跨平臺腳本語言。可是不得不認可,Tcl的學習曲線很高,它是一種和C/C++徹底不一樣的語言;
● 你能夠把完整的Tcl/Tk應用程序包裝成
一個二進制文件,一個獨立的Starpack,或者說是一個使用一種小巧的腳本解釋器Tclkit運行的Starkit。發佈就是這麼簡單。
VCF
● 清晰的OO設計;
● 在Windows是成熟的,部分支持MaxOS X和Linux;
● BSD協議。
WideStudio
● WideStudio使用它本身的組件;
● WideStudio的安裝包含在MinGW和gcc之中(不是可選的);
● WideStudio有一個IDE/設計器;
● WideStudio沒有控件交互的鍵盤導航;
● WideStudio的容器類不容許使用名字引用(如myWindow("labelCaption")->Test);
● WideStudio的庫的總大小小於10M(2008-01-25),小型的應用程序的發行版小於4M。
什麼狀況下不該該使用wxWidgets?
● wxWidgets缺乏建立漂亮的表格、圖表的商業GUI組件。參見
wxCode;
● 不支持主題(區別於在底層使用主題的工具庫),除非你使用wxUniversal或者
wxSkin;
● wxX11相比於其餘的工具庫只是一個子集,而且不穩定。你應當使用wxGTK,這個實現基於GTK構建,而不是直接在X11上面。wxX11更適合於沒有GTK的嵌入式設備;
● wxWidgets試圖支持大量的特性,所以,有些不多用到的組件不如常用的組件穩定。就像使用任何開源庫同樣,大量的測試是最佳的解決方案;
● wxWidgets沒有提供任何平臺的二進制發佈。你不得不本身編譯wxWidgets。
wxpack提供了Windows平臺上的wxWidgets的二進制版本,可是你須要下面幾百兆的開發包;
● 使用本地組件使得相同的代碼在不一樣平臺表現有所不一樣,而且可能有一些平臺相關的bugs。
==================================================
如今終於將這篇文章翻譯完了。不少翻譯不當的敬請諒解!雖然這是篇發佈在wxWidgets上面的Wiki,可是我以爲寫得還算中肯,所以是有必定的借鑑意義的。
這裏列出了不少庫,或許一些如今已經中止開發了,至少也算是見證一下C++ GUI庫曾經的百家爭嗎、百花齊放的場面吧!呵呵…