本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点。看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来——毕竟这也算是一篇官方的文章,应该比较有说服力吧!这篇文章写于2004年左右,但是很明显某些地方已经更新了,因为Qt 4.5是2009年才发布的!
 
这是我第一篇翻译,哪里翻译不好敬请谅解!
 
 
==================================================
 
首先是关于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 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实现一个wxWidgets,同样,wxWidgets通过使用wxGTK和GTK-Qt也能模拟Qt。
 
FLTK
 
    ● wxWidgets更加面向对象;
    ● FLTK实际上有更多细致不同的组件类型,只要比较一下在FLUID和wxDesigner或者DialogEdit中你所能做的就知道了。我曾经尝试将一个FLTK应用程序一直到wxWidgets上,仅模拟那些按钮就花费了相当多的时间;
    ● FLTK使用的修改后的LGPL协议比wxWidgets的协议更加严格,虽然它也提供了静态链接的不同情况;
 
FOX
 
    ● 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程序在运行时编译成字节码,这意味着当用户第一次启动程序时,将耗费更长的时间,而程序相应也会比较迟钝(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都解决了,只是它的情形并不会更糟;
 
SDL
 
    ● SDL(Simple DirectMedia Layer)是一个多媒体的C库,适合于游戏以及自定义组件,对于通用GUI组件并不很方便。它由很多SDL_开头的C结构组成;
    ● SDL在LGPL version 2下发行;
    ● SDL仅允许单窗口运行;
    ● 极好的OpenGL集成(或者是构建在OpenGL之上的类库,如OpenSceneGraph,CEGUI)。
 
SFML
 
    ● SFML(Simple and Fast Multimedia Library)是一个多媒体的C++库,适合于游戏开发以及自定义组件,对于通用GUI元素并不方便;
    ● SFML包含很多功能:音频、网络、线程等;
    ● SFML可以结合wxWidgets、Qt或者X11等使用。
 
Allegro
 
    ● 类似于SDL,Allegro是一个适用于游戏开发跨平台C库(包含很多后台使用的组件);
    ● 几乎和wxWidgets一样古老(大约1993年);
    ● Giftware协议(实质上是public domain);
    ● 需要使用gcc和一个汇编器构建;
    ● 在同一版本已经停止开发多年了,缺乏核心开发成员(原来的开发者已经不在开发团队了),存在一些内部的争论者;
    ● 非常基础的GUI功能,仅仅支持一个仅有边框的窗口——你甚至不能移动这个窗口!
    ● “控件”仅仅是通过变长参数列表的函数进行支持,像Qt一样自行绘制(默认的并不好看)。可以使用很简单的API进行自定义(有一些子库提供了比较好看的版本的控件);
    ● 非GUI部分(输入等)是底层的,通常比wxWidgets的本地实现快一些;
    ● 能够同wxWidgets共同使用,虽然Allegro有一些平台相关的函数去获取窗口句柄,但你也可以通过这个窗口句柄创建一个wxWidgets窗口,并且用它指向的那个窗口做任何事情。而wxWidgets使用wxApp指向平台相关的main/WinMain stuff。Allegro要求你在main函数之后添加END_OF_MAIN()。这是整合wxWidgets和Allegro的主要要求,但并不是很大的工作量。
 
http://blog.51cto.com/devbean/175190
												
												
								- wxWidgets与其他工具库的比较(下)
		
2009-07-25 12:37:51   GTK+       ● GTK+的网站:www.gtk.org:     ● GTK+原本是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GU ...
		 
						- 如何手写一个js工具库?同时发布到npm上
		
自从工作以来,写项目的时候经常需要手写一些方法和引入一些js库 JS基础又十分重要,于是就萌生出自己创建一个JS工具库并发布到npm上的想法 于是就创建了一个名为learnjts的项目,在空余时间也写 ...
		 
						- 细说Java主流日志工具库
		
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...
		 
						- JHChart 1.1.0 iOS图表工具库中文ReadMe
		
JHChart(最新版本1.1.0) 好吧,的确当前的github上已经存有不少的iOS图表工具库,然而,当公司的项目需要图表时,几乎没有哪个第三方能够完全满足我的项目需求.无奈之下,本人不得不花费一 ...
		 
						- JHChart iOS图表工具库1.0.3新版本详解
		
前言. 从2016年4月14日开始,本人着手开发了JHChart图表工具库.经过断断续续的开发,截止到现在,已经实现了折线图.柱状图.饼状图.环形图和表格样式的图表功能.为了方便使用,我已经将一个简单 ...
		 
						- [转]Android开源项目第二篇——工具库篇
		
本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...
		 
						- mac下svn问题——“.a”(静态库)文件无法上传解决
		
mac下svn问题——“.a”(静态库)文件无法上传解决    “.a”(静态库)文件无法上传(svn工具:Versions)          网上查询了一下,说是Xcode自带的svn和Versi ...
		 
						- Java主流日志工具库
		
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...
		 
						- Android开源项目第二篇——工具库篇
		
本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...
		 
		
	
随机推荐
	
									- Splash wait() 方法
			
wait()方法用于控制页面的等待时间,如下,实现访问淘宝并等待2秒,随后返回淘宝页面的源代码: function main(splash) splash:go("https://www.t ...
			 
						- VS调试DLL项目代码
			
如果DLL有对应的lib文件,并且dll工程和调用它的exe属于同一个解决方案,直接打断点调试就可以.例如OSG解决方案中的例子程序可以直接调试osgUtil模块的代码. 如果A.exe项目和A.dl ...
			 
						- 关于Android不能启动的问题
			
关于Android不能启动的问题 untracked pid exited[日期:2013-03-26] 来源:Linux社区  作者:Linux [字体:大 中 小]   1.ok6410nandf ...
			 
						- 决策树归纳算法之C4.5
			
前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后. 今天,来学习一下C4.5.都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢? 在此,引用一下前人 ...
			 
						- m个苹果放入n个篮子
			
题目 :X个相同的苹果放入Y个篮子,(1)篮子可以为空 ,篮子不同. 放法有C(X+Y-1,Y-1 );// (2)篮子不可以为空,篮子不同.放法有C(X-1,Y-1) //插挡板法 分析有了这个组合 ...
			 
						- sencha touch 简单的倒计时插件
			
效果如图: 代码: Ext.define('ux.label.Countdown', { alternateClassName: 'labelCountdown', extend: 'Ext.Comp ...
			 
						- hihoCoder挑战赛28	题目3 : 树的方差
			
题目3 : 树的方差 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 对于一棵 n 个点的带标号无根树,设 d[i] 为点 i 的度数. 定义一棵树的方差为数组 d[1. ...
			 
						- C程序设计语言习题(3-5)
			
编写函数itob(n,s,b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中.e.g.itob(n,s,16)把整数n格式化为十六进制整数保存在s中. #include< ...
			 
						- 【BZOJ4361】isn 动态规划+树状数组+容斥
			
[BZOJ4361]isn Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案, ...
			 
						- 解决jenkins下使用HTML Publisher插件后查看html报告显示不正常
			
在jenkins后使用html publisher查看html报告时,发现显示不全,很多东西显示不了. 在查看官方文档后,这原来是安全问题所导致的. Jenkins安全默认是将以下功能都关闭了 1.j ...