轉自:http://blog.csdn.net/lostown/article/details/658654html
最強的GUI庫當屬Qt,畢竟是商業化的東西,功能最完整,什麼都好,包括相似java代碼風格,良好的框架設計,但有幾點值的一提:java
1.它沒有使用STL,而是本身實現了一套替代方案QTL;
2.事件模型使用自創的signal/slot機制,因此須要moc.exe來預處理頭文件;
3.對皮膚的支持不是很好,須要本身寫Style類來定義各類控件的Paint;python
因此站在Qt的視角去比較全部其餘的開源庫,相信這樣能爲你做出正確的選擇。c++
1. GTK+
gtk+用C語言的面向對象的設計方法,框架設計良好,它可能會比Qt性能好。LGPL協議,能夠做商業用途,支持皮膚(theme/GtkStyle),支持XML定義界面,有設計器支持(glade),支持國際化(gettext),但沒有Qt方便,編譯的庫大小3M左右(Debug版本算上全部的lib)比Qt小;有相似Qt的signal機制,但不須要預編譯處理。對opengl和圖形圖像支持良好。
gtk+基於三個庫:glib,pango和atk。glib是底層庫,封裝了c的數據結構處理,可移植性,thread,動態載入以及一個對象系統。pango是一個佈局和文本渲染庫,處理
字體和國際化。atk是一個應用程序組件接口庫,裏面有相似Qt的action之類的。另外cario是一個矢量圖的處理庫。
由於是C,但代碼中避免不了宏和下劃線,不是那麼討人喜歡,估計C程序員比較習慣。
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
但有其餘語言的綁定,c++的是gtkmm,python的是PyGtk,ada的是AdaGtk。其中gtkmm的代碼風格比較好,沒有了下劃線和諸多宏。
gtk+的最著名的成功案例是gimp圖像處理工具和gnome桌面。
2.wxWidget
wxWidget的設計風格相似MFC,缺少現代風格的組件化設計,對於討厭一堆宏和下劃線的我不是那麼爽啊。它象Qt同樣,本身實現了一套STL的替代方案,它不象Qt那樣本身繪製widget,而是使用各個平臺本身的native API,在某些平臺,它也使用了gtk+。除非使用wxUniversal,不然不支持皮膚。LGPL協議,可做商業用途,功能齊全,RTTI/Thread/RegExp/Network/OpenGL/HTML/ODBC等都支持的很是好,可是界面設計器wxDesigner不是免費和開源的,使人極度不爽。但若是開發大型跨平臺的應用,它是最好的選擇。
3.FLTK
fltk偏向於開發OpenGL圖形應用程序,有界面設計器fluid,比較輕量級,因此不支持不少功能,例如Network、Print。代碼中使用下劃線。界面很像Motif,小而快是它的特色。LGPL協議,但有更多限制(好像分爲是否修改源代碼仍是繼承了widget類)。依賴靜態回調函數,沒有文件對話框,不支持拖曳和剪貼板。比較起來,彷佛比Fox穩定。和Motif同樣使用函數指針實現signal機制。
4.Fox
fox偏向於純粹的GUI庫,因此也很輕量,不支持國際化、多線程和和打印功能。但它的代碼比FLTK看起來爽,不使用signal/slot機制,而是使用本身的消息映射回調機制,能夠runtime鏈接以及序列化。界面很象windows95。LGPL協議,但限制你的應用也必須是LGPL協議,不象話。不支持皮膚,人家都要求了好多年了!
5.Visual Component Framework
VCF的框架設計很是好,不象Qt和wxWidget,它大量使用STL,比FLTK/Fox具備更加豐富的API,缺省使用Unicode,支持內置的國際化(本地化)和Undo/Redo機制,多線程和RTTI的支持也很好,能夠說功能的豐富性直逼wxWidget和Qt,代碼風格也是我喜歡的類型(使用namespace和相似java的命名方式)。它的目標是象VB同樣使用C++,有Visual C++的插件支持RAD。運用模板和適當的宏實現了反射(RTTI)(不須要象Qt那樣生成metaObject),用Observer模式實現了事件系統,庫比Qt和MFC都小,大約2M左右。
惟一讓我遺憾的是它還不夠成熟。
6.Notus
設計風格更加現代的框架,大量使用STL/Boost和模板技術,若是討厭層次結構和多態的GUI框架,這個適合你。
遺憾的是該項目不夠成熟(Pre-alpha)。
結論: 1. C編程使用GTK+ 2. C++大型應用使用gtkmm/wxWidget,我的偏向於前者,雖然在Windows平臺gtk+的移植不是支持的很好,但快速開發必須有設計器 3. VCF若是成熟了,將是一個好選擇 4. Fox沒意思 5. FLTK適合圖形圖像程序,若是是3D應用和遊戲,通常遊戲引擎的框架內都實現了內置的GUI框架,例如Nebula的框架,很是吸引人;blender的ghost也很是棒(可是GPL)。