wxWidgets是一個開源的跨平臺的C++構(gòu)架庫(framework),它可以提供GUI(圖形用戶界面)和其它工具。目前的2.x版本支持所有版本的Windows、帶GTK+或Motif的Unix和MacOS。一個支持OS/2的版本正在開發(fā)中。
wxWidgets 工具包提供圖形用戶界面(GUI)開發(fā)所需的一些功能強大的跨平臺工具。除了原生的 C++, 還有其他幾種語言提供了使用該工具包所需的包裝程序。本文將介紹如何使用 wxWidgets 工具包來在所選用的編程語言中創(chuàng)建用途廣泛的 GUI。
wxWidgets的一些基礎(chǔ)知識:
1、wxWidgets不僅僅使用C++,而且能夠使用python、perl、java、lua、eiffel、C#(.NET)、basic、ruby,甚至是javascript(見General Information)(豆子:有些語言連聽都沒聽說過,呵呵);
2、wxWidgets是一個完整的GUI工具庫,提供了很多工具類;
3、有很多文檔(雖然一些只是文檔片段);
4、免費供個人使用或者商業(yè)使用;
5、只要可能,wxWidgets就會使用本地平臺的SDK。也就是說,同一段代碼,在Windows下編譯將具有Windows程序的外觀,在Linux下編譯將具有Linux程序的外觀;
6、 這樣做的優(yōu)點是,wxWidgets程序看上去和本地程序差不多,有時也會有一些本地組件的行為——例如在OS X上所有的文本域(text area)都將獲得內(nèi)建的拼寫檢查的能力;
7、 這樣做的缺點是,wxWidgets程序在不同平臺的行為可能會不一致;那些使用輕量級組件的GUI庫或許會丟失一些特定平臺的特性,但會將平臺相關(guān)的代碼減到最少(因此,這樣做也能夠?qū)⒉煌脚_組件的行為差異降到最小,并且減少了特定平臺的bugs)。另外,由于使用本地感官風格,使得wxWidgets不適合于那些希望具有不同于系統(tǒng)界面風格的程序的開發(fā)。
wxwidgets和其他一些主流庫的比較
wxwidgets vs MFC:這兩風格很像,在源代碼中用了很多的宏定義,誰模仿誰我就不去關(guān)心了,反正對于MFC比較熟悉的人應(yīng)該對wxwidgets感覺不錯。MFC中大量運用虛函數(shù),而wxwidgets中大量用重載,理論上說wxwidgets的運行效率要比MFC高一些。MFC只能支持windows這種硬傷很難應(yīng)用到linux下面。
wxwidgets vs QT:在linux學(xué)習圖形界面開發(fā)的時候我也猶豫著是否學(xué)習QT,最后還是選擇了wxwidgets,這主要是公司這么選擇,我要是非得搞QT就變成一個人搞了,那多沒意思。QT的優(yōu)點也比較多:
1. 支持的平臺最多
2. 商業(yè)化支持
3. 完整的文檔和RAD工具
4. 最為面向?qū)ο?br/>5. 世界上最為成功的手機廠商支撐,對于移動終端的支持最為完善
Qt的缺點:
1. 使用的是非標準C++
2. 每個平臺不是"Native GUI"
3. 過于龐大且運行緩慢
4. 與其它庫不是很兼容(主要是STL之類的兼容問題)
5. 基本只能使用特定的qmake工具(其它工具經(jīng)過良好的修改也可以,不過相當于重新編寫一個qmake,是否值得)
6.許可協(xié)議的話是做掙錢的程序的話是需要付費的,這一條很不爽。
另外linux下面的GTK也是跨平臺的,但是它是C語言的封裝,使用起來不是方便,基于以上原因我選擇了wxwidgets,盡管它有以下明顯的缺陷:
1. 由于是偏MFC,則面向?qū)ο蠓庋b做得不是非常好
2. 相對缺乏的文檔、資源。資源方面是相當?shù)膮T乏,從google上搜索基本就能看出使用這個庫的人是相當少啊,學(xué)習難度相對來說也大一些。
3. 缺乏很好的商業(yè)化支持,如果商業(yè)軟件出問題需要支持,稍微麻煩點
優(yōu)勢
那么wxwidgets有什么特別之處呢?比起其他的跨平臺gui庫,有什么好處呢?
1、(不得不放在第一位的)就是他無論對于個人還是對于商業(yè)應(yīng)用都是免費的!
——它的主體框架的授權(quán)協(xié)議支持商業(yè)免費應(yīng)用,其外圍功能庫中很多也是lgpl授權(quán)的,這無疑對于我等“0資本”的人來說是天大的好事。不同于Qt之類的跨平臺gui庫。
2、 他是跨平臺的gui庫,支持的操作系統(tǒng)很全面,甚至支持pda(說不定過一段時間他都能夠支持symbian了)(最新版本【3.0.1】支持iOS,可以在下載的源碼包中找到wxWidgets-3.0.1.tar.bz2\wxWidgets-3.0.1\build\osx
\wxiphone.xcodeproj)。
—— 此跨平臺非彼跨平臺,它雖然不像java那樣是“全面”的,而僅僅是gui庫,但是gui是計算機編程中,最為麻煩、耗費時間、容易出現(xiàn)bug的部分,特別當你想要自己的軟件運行在多個操作系統(tǒng)上的時候,開發(fā)和維護的難度讓人難
以想象。其實c++也是支持“跨平臺”的,因為c++可以在任何平臺上編譯運行,之所以沒幾個人說他是跨平臺的,主要問題就出在變量長度和各操作系統(tǒng)的gui(這里的“界面”我指得是很廣義的)上,如果解決了gui的問題,基本上就
解決了c++的“跨平臺”問題——至少不用為每種平臺都維護一份源代碼了。
3、 wxwidgets提供的gui是大量使用宏的,這就意味著它是在盡可能的使用目標系統(tǒng)native的gui樣式。
——你可以訪問wxwidgets網(wǎng)站,看看那些開發(fā)的軟件的截圖,全是系統(tǒng)native級別的。如果你開發(fā)了一個xp系統(tǒng)的軟件的話,你的軟件會仍然以“xp專有的‘小賤人’級別”的面貌展現(xiàn)在你面前。
4、 它支持的編譯器也很多,而且borland也曾聲明將在c++builderx2里邊提供對wxidgets的支持——預(yù)覽版都出來了。
——其實我就是看到borland在c++不景氣的時候,這么看重這個東東,甚至用它來做“王牌”,才開始注意到他的。當然,反過來,也正是borland的支持,才使他活力大發(fā)的。
5、 自然,有牛X支持,而且是開源的,wxwidgets一直都在快速穩(wěn)健的開發(fā)中,其周邊工具也越來越多。
—— 隨著MS開始全力支持他的.net,c++成了“沒落”的語言,但是不可否認,c++還是有很多用武之地的,所以根本不可能真正沒落。沒有了超牛X的支持,地球人自然開始尋求新的發(fā)展方式,wxwidgets這種開源免費,且允許商業(yè)應(yīng)用的好東東,自然會被人們所重視。