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