C/C++ 兩大GUI庫Qt & GTK比較
一: Qt:
Qt是Trolltech公司的一個多平台的C++圖形化使用者介面應用程式架構。它提供給應用程式開發人員建立藝術級的圖形化使用者介面所需的所用功能。Qt是完全物件導向的很容易擴充,並且允許真正地組件編程。自從1996年早些時候,Qt進入商業領域,它已經成為全世界範圍內數千種成功的應用程式的基礎。Qt也是流行的Linux案頭環境KDE 的基礎,同時它還支援Windows、Macintosh、Unix/X11等多種平台。
Qt畢竟是商業化的東西,功能最完整,什麼都好,包括類似java代碼風格,良好的架構設計,但有幾點值的一提:
1.它沒有使用STL,而是自己實現了一套替代方案QTL;
2.事件模型使用自創的signal/slot機制,所以需要moc.exe來預先處理標頭檔;
3.對皮膚的支援不是很好,需要自己寫Style類來定義各種控制項的Paint;
參考網站:http://www.trolltech.com
二:GTK+ & GTKmm
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程式員比較習慣。
但有其他語言的綁定,c++的是gtkmm,python的是PyGtk,ada的是AdaGtk。其中gtkmm的代碼風格比較好,沒有了底線和諸多宏。
gtk+的最著名的成功案例是gimp影像處理工具和gnome案頭。