wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。
wxWidgets 工具包提供图形用户界面(GUI)开发所需的一些功能强大的跨平台工具。除了原生的 C++, 还有其他几种语言提供了使用该工具包所需的包装程序。本文将介绍如何使用 wxWidgets 工具包来在所选用的编程语言中创建用途广泛的 GUI。
1、wxWidgets不仅仅使用C++,而且能够使用python、perl、java、lua、eiffel、C#(.NET)、basic、ruby,甚至是javascript(见General Information)(豆子:有些语言连听都没听说过,呵呵);
2、wxWidgets是一个完整的GUI工具库,提供了很多工具类;
3、有很多文档(虽然一些只是文档片段);
4、免费供个人使用或者商业使用;
5、只要可能,wxWidgets就会使用本地平台的SDK。也就是说,同一段代码,在Windows下编译将具有Windows程序的外观,在Linux下编译将具有Linux程序的外观;
6、 这样做的优点是,wxWidgets程序看上去和本地程序差不多,有时也会有一些本地组件的行为——例如在OS X上所有的文本域(text area)都将获得内建的拼写检查的能力;
7、 这样做的缺点是,wxWidgets程序在不同平台的行为可能会不一致;那些使用轻量级组件的GUI库或许会丢失一些特定平台的特性,但会将平台相关的代码减到最少(因此,这样做也能够将不同平台组件的行为差异降到最小,并且减少了特定平台的bugs)。另外,由于使用本地感官风格,使得wxWidgets不适合于那些希望具有不同于系统界面风格的程序的开发。
wxwidgets vs MFC:这两风格很像,在源代码中用了很多的宏定义,谁模仿谁我就不去关心了,反正对于MFC比较熟悉的人应该对wxwidgets感觉不错。MFC中大量运用虚函数,而wxwidgets中大量用重载,理论上说wxwidgets的运行效率要比MFC高一些。MFC只能支持windows这种硬伤很难应用到linux下面。
wxwidgets vs QT:在linux学习图形界面开发的时候我也犹豫着是否学习QT,最后还是选择了wxwidgets,这主要是公司这么选择,我要是非得搞QT就变成一个人搞了,那多没意思。QT的优点也比较多:
1. 支持的平台最多
2. 商业化支持
3. 完整的文档和RAD工具
4. 最为面向对象
5. 世界上最为成功的手机厂商支撑,对于移动终端的支持最为完善
Qt的缺点:
1. 使用的是非标准C++
2. 每个平台不是"Native GUI"
3. 过于庞大且运行缓慢
4. 与其它库不是很兼容(主要是STL之类的兼容问题)
5. 基本只能使用特定的qmake工具(其它工具经过良好的修改也可以,不过相当于重新编写一个qmake,是否值得)
6.许可协议的话是做挣钱的程序的话是需要付费的,这一条很不爽。
另外linux下面的GTK也是跨平台的,但是它是C语言的封装,使用起来不是方便,基于以上原因我选择了wxwidgets,尽管它有以下明显的缺陷:
1. 由于是偏MFC,则面向对象封装做得不是非常好
2. 相对缺乏的文档、资源。资源方面是相当的匮乏,从google上搜索基本就能看出使用这个库的人是相当少啊,学习难度相对来说也大一些。
3. 缺乏很好的商业化支持,如果商业软件出问题需要支持,稍微麻烦点
那么wxwidgets有什么特别之处呢?比起其他的跨平台gui库,有什么好处呢?
1、(不得不放在第一位的)就是他无论对于个人还是对于商业应用都是免费的!
——它的主体框架的授权协议支持商业免费应用,其外围功能库中很多也是lgpl授权的,这无疑对于我等“0资本”的人来说是天大的好事。不同于Qt之类的跨平台gui库。
2、 他是跨平台的gui库,支持的操作系统很全面,甚至支持pda(说不定过一段时间他都能够支持symbian了)(最新版本【3.0.1】支持iOS,可以在下载的源码包中找到wxWidgets-3.0.1.tar.bz2wxWidgets-3.0.1uildosx
wxiphone.xcodeproj)。
—— 此跨平台非彼跨平台,它虽然不像java那样是“全面”的,而仅仅是gui库,但是gui是计算机编程中,最为麻烦、耗费时间、容易出现bug的部分,特别当你想要自己的软件运行在多个操作系统上的时候,开发和维护的难度让人难
以想象。其实c++也是支持“跨平台”的,因为c++可以在任何平台上编译运行,之所以没几个人说他是跨平台的,主要问题就出在变量长度和各操作系统的gui(这里的“界面”我指得是很广义的)上,如果解决了gui的问题,基本上就
解决了c++的“跨平台”问题——至少不用为每种平台都维护一份源代码了。
3、 wxwidgets提供的gui是大量使用宏的,这就意味着它是在尽可能的使用目标系统native的gui样式。
——你可以访问wxwidgets网站,看看那些开发的软件的截图,全是系统native级别的。如果你开发了一个xp系统的软件的话,你的软件会仍然以“xp专有的‘小贱人’级别”的面貌展现在你面前。
4、 它支持的编译器也很多,而且borland也曾声明将在c++builderx2里边提供对wxidgets的支持——预览版都出来了。
——其实我就是看到borland在c++不景气的时候,这么看重这个东东,甚至用它来做“王牌”,才开始注意到他的。当然,反过来,也正是borland的支持,才使他活力大发的。
5、 自然,有牛X支持,而且是开源的,wxwidgets一直都在快速稳健的开发中,其周边工具也越来越多。
—— 随着MS开始全力支持他的.net,c++成了“没落”的语言,但是不可否认,c++还是有很多用武之地的,所以根本不可能真正没落。没有了超牛X的支持,地球人自然开始寻求新的发展方式,wxwidgets这种开源免费,且允许商业应用的好东东,自然会被人们所重视。