程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> wxWidgets與其他工具庫的比較(上)

wxWidgets與其他工具庫的比較(上)

編輯:關於C語言

本文是在wxWidgets Wiki上面找到的一篇,對比了wxWidgets和其他一些界面工具的特點。看到很多朋友在網上詢問這些庫各自的特點,我想先把這篇文章翻譯出來——畢竟這也算是一篇官方的文章,應該比較有說服力吧!這篇文章寫於2004年左右,但是很明顯某些地方已經更新了,因為Qt 4.5是2009年才發布的!   這是我第一篇翻譯,哪裡翻譯不好敬請諒解!   原文:http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits   ==================================================   首先是關於wxWidgets的一些基礎知識:       ● wxWidgets不僅僅使用C++,而且能夠使用python、perl、java、lua、eiffel、C#(.NET)、basic、ruby,甚至是javascript(見General Information)豆子:有些語言連聽都沒聽說過,呵呵);     ● wxWidgets是一個完整的GUI工具庫,提供了很多工具類;     ● 有很多文檔雖然一些只是文檔片段);     ● 免費供個人使用或者商業使用;     ● 只要可能,wxWidgets就會使用本地平台的SDK。也就是說,同一段代碼,在Windows下編譯將具有Windows程序的外觀,在Linux下編譯將具有Linux程序的外觀;         ○ 這樣做的優點是,wxWidgets程序看上去和本地程序差不多,有時也會有一些本地組件的行為——例如在OS X上所有的文本域(text area)都將獲得內建的拼寫檢查的能力;                ○ 這樣做的缺點是,wxWidgets程序在不同平台的行為可能會不一致;那些使用輕量級組件的GUI庫或許會丟失一些特定平台的特性,但會將平台相關的代碼減到最少因此,這樣做也能夠將不同平台組件的行為差異降到最小,並且減少了特定平台的bugs)。另外,由於使用本地感官風格,使得wxWidgets不適合於那些希望具有不同於系統界面風格的程序的開發。   下面是wxWidgets與不同的GUI庫之間的對比。   Qt       ● Qt(http://www.qtsoftware.com/)和wxWidgets一樣,也具有很多和GUI構建無關的類,比如日期/時間,容器,網絡,OpenGL功能等;     ● Qt 4.5 在Windows、Mac和GNU/Linux下具有兩個協議:一個是對開源和商業軟件的LGPL協議,以及為那些認為從法律角度來說認為LGPL不安全的人們使用的商業協議。而所有的wxWidgets版本則是在經過修改的LGPL協議這個協議已經通過了OSI的認可)下發布的,允許免費開發和發布所有的應用程序豆子:所以Qt那個曾經令人頗有微詞的許可問題已經不復存在);     ● Qt沒有wxWidgets所擁有的真正的本地化界面。我們的意思是,Qt在各個平台上自己繪制組件,使用自己的繪制技術將其模擬得很逼真。雖然Qt在Mac OS X,Windows XP 和 Vista上使用本地API實現組件的界面風格,但是事件處理、結果回調以及組件布局都是由Qt本身實現的;     ● wxUniversal的實現同Qt類似;     ● 需要注意的是,在KDE和嵌入式Linux平台上,Qt就是本地GUI庫;     ● Qt被很多大型項目使用,如KDE和Opera浏覽器另一方面,wxWidgets也被用於AOL Communicator之類的項目);     ● Qt極大限度地使用了虛函數Qt所有組件的基類QWidget包含至少51個虛函數),這比wxWidgets更加面向對象相比而言,wxWidgets更多的使用了類似於MFC的宏)。這意味著,使用Qt你的代碼行數將少一些,但是wxWidgets的執行速度將快一些這取決於你向誰去問這個問題);     ● Qt被IBM和Borland Kylix已經停止更新)使用,這意味著更加可靠。但是,有傳言說wxWidgets將被應用於下一版本的C++BuilderX;     ● Qt在GNU/Linux上一套完整的包含幀緩沖(framebuffer)嵌入式GUIQt for Embedded Linux),使得你能夠非常容易的使用。這意味著一旦你有了帶有/dev/fb的Linux,你就可以在幾分鐘內准備好。Qt for Embedded Linux 同X11相比只有很小的差別;     ● Qt的IDE很多,QtDesigner、QtCreator、QDevelop、Edyuk等,也能夠同流行的IDE,如Visual Studio、Eclipse或者XCode,進行整合wxWidgets也有很多IDE);     ● Qt提供全面的商業支持其實wxWidget也有提供,見http://www.wxwidgets.org/support/support.htm);     ● 你可以使用基於Qt實現一個wxWidgets,同樣,wxWidgets通過使用wxGTK和GTK-Qt也能模擬Qt。   FLTK       ● FLTK的網站:http://www.fltk.org/;     ● wxWidgets更加面向對象;     ● FLTK更加輕量級,而wxWidgets更加全面wxWidgets支持網絡、打印等,而FLTK僅支持少量或不支持這些特性)。參見wxWidgets功能列表(http://www.wxwidgets.org/about/feature2.htm),FLTK功能列表(http://www.fltk.org/documentation.php/doc-1.1/intro.html#2_2);     ● FLTK實際上有更多細致不同的組件類型,只要比較一下在FLUID和wxDesigner或者DialogEdit中你所能做的就知道了。我曾經嘗試將一個FLTK應用程序一直到wxWidgets上,僅模擬那些按鈕就花費了相當多的時間;     ● FLTK使用的修改後的LGPL協議比wxWidgets的協議更加嚴格,雖然它也提供了靜態鏈接的不同情況;     ● FLTK有一個能夠進行GUI設計的IDEFLUID(http://www.fltk.org/documentation.php/doc-1.1/fluid.html)。  FOX       ● FOX站點:http://www.fox-toolkit.org/;     ● FOX更加輕量級,而wxWidgets則是全功能的;     ● wxWidgets有一個完整的API,而FOX僅僅關注於GUI特性;     ● 類似於Qt,FOX在每個平台繪制出其組件,而不是使用本地組件;相比之下,wxWidgets使用的是本地API。因此,FOX可能更快一些,但是它提供的界面可能不能很好的融入目標平台例如,不能應用Windows XP的主題風格);     ● FOX缺少打印支持,但是支持亞洲文字的I18N它內部使用UTF-8編碼)豆子:這段原句是FOX lacks printing and I18N support for asian language (it's using UTF-8 internally). ,但原文的意思是缺乏I18N的,可後面又說使用UTF-8編碼,因此估計是語誤。於是到網上查了一下,FOX 1.6版之前是沒有I18N的,1.6版才使用UTF-8編碼);     ● FOX不支持Windows標准對話框,但有一個替代方案。   Java       ● Java是一個能夠使用不同GUI庫Swing,AWT,SWT,Qt Jambi,甚至wxWidgets)的編程語言。wxWidget是一個GUI API,因此二者能夠很好的結合;     ● Java程序在運行時編譯成字節碼,這意味著當用戶第一次啟動程序時,將耗費更長的時間,而程序相應也會比較遲鈍Java的本地編譯器GCJ已經可用,但是並不支持Java所有的特性);     ● 另一方面,wxWidgets直接編譯成機器碼,因此運行很快;     ● 沒有混淆的Java字節碼很容易反編譯出來。如果你的應用程序是開源的,這無所謂,但是如果能夠查看源代碼成為一個問題,那你就得想想辦法了編譯成本地代碼的wxWidgets程序也能夠被反編譯,但是這個過程要比反編譯Java字節碼困難得多);     ● 使用基於Java的應用程序必須安裝JVM。近年來,隨著JVM的普及,這已經不是大問題,但是,如果用戶使用的是舊版本的JVM,則可能會有性能或者安全的問題;     ● 鑒於Java庫運行較慢,一些Java庫是使用的wxWidgets和C++編寫的!     ● 上述問題的一個例子是wx4j,一個Java的wxWidgets實現。wx4j用wxWidgets綁定Java,可以讓Java程序員使用Java語言,但是擁有C++程序的速度;     ● 為了實現跨平台,Java組件僅提供了各個平台公共的特性,一些平台相關的特性從Java API中去除了,這些包括Windows的任務欄,Mac OS的菜單欄和Unix的文件屬性等;     ● 相比而言,如果你僅在一個平台上進行編譯,wxWidgets允許你直接使用平台相關的代碼代替 ifdef 預編譯,並且wxWidgets也有在不同平台模擬的組件,如MDI和樹控件;     ● Java程序比C++程序占用更多的內存;     ● “一次編寫,到處運行”依然是一個神話。所有的JVM都含有bugs,並且在一個平台上編寫一個“大”的Java程序,讓它在另外的平台也能運行,簡直是癡心妄想。並不是說這些問題wxWidgets都解決了,只是它的情形並不會更糟;     ● wxWidgets在某些方面更完整更直觀。對比一下wxString和java.lang.String,留意一下它們的特性和文檔質量;     ● 一些Java擁護者說下一版本的JVM將會解決很多速度的問題,但是benchmark tests do not reflect this豆子:這個對比是2004年的,已經不足為信了,不過,豆子也沒有去找更新的資料)。   SDL       ● SDL網站:http://www.libsdl.org;     ● SDLSimple DirectMedia Layer)是一個多媒體的C庫,適合於游戲以及自定義組件,對於通用GUI組件並不很方便。它由很多SDL_開頭的C結構組成;     ● 對比一下wxWidgets和SDL:http://code.technoplaza.net/wx-sdl/;     ● SDL在LGPL version 2下發行;     ● SDL僅允許單窗口運行;     ● 極好的OpenGL集成或者是構建在OpenGL之上的類庫,如OpenSceneGraph,CEGUI)。   SFML       ● SFML網站:http://sfml.sourceforge.net/index.php;     ● SFMLSimple and Fast Multimedia Library)是一個多媒體的C++庫,適合於游戲開發以及自定義組件,對於通用GUI元素並不方便;     ● SFML包含很多功能:音頻、網絡、線程等;     ● SFML可以結合wxWidgets、Qt或者X11等使用。  Allegro       ● Allegro網站:http://alleg.sourceforge.net;     ● 類似於SDL,Allegro是一個適用於游戲開發跨平台C庫包含很多後台使用的組件);     ● 幾乎和wxWidgets一樣古老大約1993年);     ● Giftware協議實質上是public domain);     ● 需要使用gcc和一個匯編器構建;     ● 在同一版本已經停止開發多年了,缺乏核心開發成員原來的開發者已經不在開發團隊了),存在一些內部的爭論者;     ● 非常基礎的GUI功能,僅僅支持一個僅有邊框的窗口——你甚至不能移動這個窗口!     ● “控件”僅僅是通過變長參數列表的函數進行支持,像Qt一樣自行繪制默認的並不好看)。可以使用很簡單的API進行自定義有一些子庫提供了比較好看的版本的控件);     ● 繪圖當然要比wxWidgets快得多,有一個OpenGL層http://allegrogl.sourceforge.net/)使使用OpenGL進行繪制要比原來容易很多;     ● 非GUI部分輸入等)是底層的,通常比wxWidgets的本地實現快一些;     ● 能夠同wxWidgets共同使用,雖然Allegro有一些平台相關的函數去獲取窗口句柄,但你也可以通過這個窗口句柄創建一個wxWidgets窗口,並且用它指向的那個窗口做任何事情。而wxWidgets使用wxApp指向平台相關的main/WinMain stuff。Allegro要求你在main函數之後添加END_OF_MAIN()。這是整合wxWidgets和Allegro的主要要求,但並不是很大的工作量。   ==================================================   待續……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved