C/C++編程GUI庫比較


轉自:http://blog.csdn.net/lostown/article/details/658654

最強的GUI庫當屬Qt,畢竟是商業化的東西,功能最完整,什么都好,包括類似java代碼風格,良好的框架設計,但有幾點值的一提:


     1.它沒有使用STL,而是自己實現了一套替代方案QTL;
     2.事件模型使用自創的signal/slot機制,所以需要moc.exe來預處理頭文件;
     3.對皮膚的支持不是很好,需要自己寫Style類來定義各種控件的Paint;


    所以站在Qt的視角去比較所有其他的開源庫,相信這樣能為你作出正確的選擇。


     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桌面。
 GIMP ( http://www.gimp.org/), an image manipulation program
 AbiWord ( http://www.abiword.com/), a professional word processor
 Dia ( http://www.lysator.liu.se/~alla/dia/dia.html), a diagram creation program
 GnuCash ( http://www.gnucash.org/), a personal finance manager
 Gnumeric ( http://www.gnome.org/projects/gnumeric/), the GNOME spreadsheet application
 Glade ( http://glade.gnome.org/), a GTK+ based RAD tool which produces GTK+ and GNOME applications
 Anjuta ( http://anjuta.sourceforge.net/), a versatile Integrated Development Environment (IDE) using C and C++ for GTK+ and GIMP.
 gtk開發框架: http://bakery.sourceforge.net/
 
     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)。
 
    更多的GUI Toolkit:  http://www.atai.org/guitool/
 
     結論:
    1. C編程使用GTK+
    2. C++大型應用使用gtkmm/wxWidget,個人偏向於前者,雖然在Windows平台gtk+的移植不是支持的很好,但快速開發必須有設計器
    3. VCF如果成熟了,將是一個好選擇
    4. Fox沒意思
    5. FLTK適合圖形圖像程序,如果是3D應用和游戲,一般游戲引擎的框架內都實現了內置的GUI框架,例如Nebula的框架,非常吸引人;blender的ghost也非常棒(但是GPL)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM