`
iwmd24iwmd
  • 浏览: 12692 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

wxWidgets与其他工具库的比较(上)

 
阅读更多

wxWidgets与其他工具库的比较(上)
2010年10月10日
  本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点。看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来--毕竟这也算是一篇官方的文章,应该比较有说服力吧!这篇文章写于2004年左右,但是很明显某些地方已经更新了,因为Qt 4.5是2009年才发布的!
  这是我第一篇翻译,哪里翻译不好敬请谅解!
  原文: http://wiki.wxwidgets.org/WxWidgets_Compared_To_Ot her_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)嵌入式GUI(Qt 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/intr o.html#2_2);
  ● FLTK实际上有更多细致不同的组件类型,只要比较一下在FLUID和wxDesigner或者DialogEdit中你所能做的就知道了。我曾经尝试将一个FLTK应用程序一直到wxWidgets上,仅模拟那些按钮就花费了相当多的时间;
  ● FLTK使用的修改后的LGPL协议比wxWidgets的协议更加严格,虽然它也提供了静态链接的不同情况;
  ● FLTK有一个能够进行GUI设计的IDEFLUID( http://www.fltk.org/documentation.php/doc-1.1/flui d.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;
  ● SDL(Simple 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;
  ● SFML(Simple 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的主要要求,但并不是很大的工作量。
分享到:
评论

相关推荐

    wxWidgets与其他GUI库的比较

    wxWidgets与其他GUI工具库的比较,比较全面。

    wxWidgets(开发工具包)

    wxWidgets是一个程序员的开发工具包,这个工具包用来开发用于桌面或者移动设备的图形界面应用程序。或者说它提供了一个框架,它作了很多底层的管家婆似的工作以便给应用程序提供一些默认的行为。wxWidgets库给程序员...

    wxWidgets wxWidgets

    wxWidgets是一个程序员的开发工具包,这个工具包用来开发用于桌面或者移动设备的图形界面应用程序。或者说它提供了一个框架,它作了很多底层的管家婆似的工作以便给应用程序提供一些默认的行为。wxWidgets库给程序员...

    嵌入式图像开发wxWidgets

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具,

    wxWidgets-3.0.2

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具

    wxWidGets3.0.2

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。

    gui开发框架wxwidgets

    wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports ... An OS/2 port is in progress.)的GUI库和其他一些很有用的工具,提供了类似MFC的功能。

    Cross.Platform.GUI.Programming.with.wxWidgets(中文版)_part1

    <br>虽然wxWidgets经常被打上图形界面程序开发的标签,但是它在很多其它的应用程序开发方面也提供了很多特性支持。这样作的目的是为了让使用wxWidgets编写的程序的各个部分都可以是跨平台的,而不仅仅是图形...

    Cross.Platform.GUI.Programming.with.wxWidgets(中文版)_part3

    <br>虽然wxWidgets经常被打上图形界面程序开发的标签,但是它在很多其它的应用程序开发方面也提供了很多特性支持。这样作的目的是为了让使用wxWidgets编写的程序的各个部分都可以是跨平台的,而不仅仅是图形...

    wxWidgets-2.8.12-gcc-4.7.1-mono-static.zip

    wxWidgets 2.8.12静态编译库 CSDN发布地址:<http://blog.csdn.net/WinsenJiansbomber/article/details/50616754> 编译工具:TDM-GCC 4.7.1 DEBUG编译命令: set mingw=C:\CodeBlocks\mingw471 set path=%mingw%...

    wxWidgets 2.8.12安装包

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。

    Cross.Platform.GUI.Programming.with.wxWidgets(中文版)_part2

    <br>虽然wxWidgets经常被打上图形界面程序开发的标签,但是它在很多其它的应用程序开发方面也提供了很多特性支持。这样作的目的是为了让使用wxWidgets编写的程序的各个部分都可以是跨平台的,而不仅仅是图形...

    使用AUI的wxWidgets程序(codeblocks工程)

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。 wxAUI是一个高级用户接口。最初由kirix Cprp提供。wxAUI尝试封装以下的UI: 1Frame管理 2工具条 3非模态控件 4L&...

    使用wxWidgets进行跨平台程序开发.rar

    wxWidgets是一个开源的跨平台的C 构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK 或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。 这份资料是...

    wxWidgets-3.0.2.7z

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。wxWidgets的主体是由C++构建的,但你并不是必需通过C++才能使用wxWidgets.wxWidgets拥有许多其它语言的绑定...

    wxWidgets源码

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。此版本为3.0.0.

    Cross.Platform.GUI.Programming.with.wxWidgets(中文版)_part5

    <br>虽然wxWidgets经常被打上图形界面程序开发的标签,但是它在很多其它的应用程序开发方面也提供了很多特性支持。这样作的目的是为了让使用wxWidgets编写的程序的各个部分都可以是跨平台的,而不仅仅是图形...

    Cross.Platform.GUI.Programming.with.wxWidgets(中文版)_part4

    <br>虽然wxWidgets经常被打上图形界面程序开发的标签,但是它在很多其它的应用程序开发方面也提供了很多特性支持。这样作的目的是为了让使用wxWidgets编写的程序的各个部分都可以是跨平台的,而不仅仅是图形...

    wxWidgets-3.0.2-doc-html

    wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。wxWidgets的主体是由C++构建的,但并不是必需通过C++才能使用。wxwidgets提供的gui是大量使用宏的,这就意味着它...

    C++ 第三方库管理工具

    1,C++第三方库管理工具vcpkg,类似于java maven,C# Nuget,支持windows、macos、linux。 2,vcpkg可以帮C++程序员快速的获取编译第三方库,省去了手动配置各种依赖库编译环境的麻烦,提高开发效率。 3,压缩包来做...

Global site tag (gtag.js) - Google Analytics