GTK+
 
    ● GTK+的网站:www.gtk.org
    ● GTK+原本是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GUI库;
    ● GTK+已经被移植到Windows,VMS以及其他的系统上面(在MacOS X上面现在可以通过苹果的X11应用程序实现,其本地版本正在开发之中),使用相同的API。但是,GTK+的设计初衷是Unix,多平台的开发是后来才加入的;
    ● GTK+是GNOME用户界面的原始构建库;
    ● 不同于wxWidgets,GTK+支持C语言(同样,GTK+也有一个C++的封装版本GTKMM,http://www.gtkmm.org);
    ● GTK+的API被很好的设计过,包含了安全类型转换和其他的一些机制,但是C++语言已经内建了这些;
    ● GTK+构建在glib库之上,这是一个通用库(在某些方面类似于C++的STL,它提供了一些数据结构,以及一些帮助内存管理的函数等);
    ● 在不同平台具有相对一致的界面,除了Windows XP,在XP系统中,GTK+尝试使用Wimp外观(基于UxTheme)来模拟Windows本地界面,获得了一定的成功。但是,它依然是一个Unix库;
    ● 既然wxWidgets在Unix上使用GTK(或是GTK2),也就没有什么理由在wxWidgets之上构建跨平台的C++程序了。
 
Kylix
 
    ● Kylix是Borland/Inprise的一个不成功的产品,所以很难说它还会继续被支持多久;
    ● Kylix基于Qt构建;
    ● Kylix仅支持为数不多的平台;
    ● Kylix的IDE使用了不少于三个库,并且很不专业。
 
Lazarus
 
    ● Lazarus是一个跨平台的开源RAD IDE,也是一个编写GUI程序的库;
    ● Lazarus很多地方与Borland Delphi兼容,相同的代码可以被这两个编译器编译;
    ● Lazarus有为本地使用或者客户端/服务器的数据库应用的数据展示组件;
    ● Lazarus仅支持Object Pascal;
    ● 工作方式类似于wxWidgets,支持很多底层的工具集:gtk1,gtk2,win32api,qt,carbon和winCEapi;
    ● 底层的免费Pascal编译器支持很多现在仍在使用的操作系统和架构;
    ● 现在它支持的平台比wxWidgets少。
 
Ultimate++
 
    ● Ultimate++仅支持Windows和Linux,不支持MaxOS;
    ● 在http://upp.sourceforge.net/www$uppweb$vswx$en-us.html的对比展示了一个简单的例子,但是这并不能说明这个库如何很好的开发更大的应用程序。
 
Notus
 
    ● Notus网站:http://sourceforge.net/projects/notus
    ● 实际上存在wxWidgets ;) (豆子:原文是wxWidgets actually exists,这可能是说还有更好的wxWidgets);
    ● Notus似乎是要更多地使用标准库和现代C++概念,例如遍历器、模板、命名空间等等(相比之下,wxWidgets更多的是使用了非标准的方式);并且它更多地是借鉴了Boost的设计理念(你可以把它认为是一个好的或者不好的事情),它和Boost的其他的库在一起工作得很好。当然,既然它并不存在,这是不是真的还得要时间的检验。(豆子:看看Notus的站点,好像这是库是把泛型的概念带入到GUI编程里面)
 
MFC
 
    ● MFC仅仅能够在Windows上免费使用:
        ○ Visaul C++跨平台版本有一个maxintosh版(至少要800美元),但是自从4.1版本的编译器就不支持了;
        ○ 也有一些Unix的模仿,如MainWin,相当的昂贵,需要运行时协议,并且据说有一些有问题的支持;
    ● 如果一个程序使用wxWidgets或者MFC构建,并且源代码是开放的,那么EULA(豆子:最终用户许可协议)是不能约束wxWidgets的;
    ● MFC的执行程序比wxWidgets小(基本上是靠编译器实现体积缩小的);
    ● MFC拥有很多优秀的商业组件;
    ● 有人说,wxWidgets的事件表(event tables)要比MFC的消息映射(message map)好;
    ● wxWidgets的类层次结构更多合理,而MFC在顶层类名显得不那么一致性;
    ● wxWidgets提供了大量的相关的方便的工具类,而MFC提供了更多的窗口相关的类;
    ● 同.NET不同,MFC不会迁移到.NET平台;另一方面,wxWidgets已经有了初步的.NET版本;
    ● MFC提供了更多的组件,尤其是有关数据的控件;
    ● 有些地方使用wxWidgets更加简单一些,例如特定类型的窗口(如总是在最上方的窗口等),另一些地方使用MFC会更方便,日期选择工具条;
    ● 或许使用MFC最重要的一点是MSVC,这个IDE本身;
    ● 参见WxWidgets For MFC Programmers了解更多区别。
   
Mozilla Framework
 
    ● 在Mozilla程序中需要使用JavaScript、XUL和C++;而wxWidgets只使用C++;
    ● 在Mozilla中使用C++(XPCOM)相当困难;在wxWidgets中使用C++就简单得多。
 
Tk
 
    ● Tk又称为:Tcl/Tk,Perl/Tk;Python/Tkinter;
    ● 古老的API,但是实现了基础的功能。很多扩展提供了新的组件:著名的BWidgets Tcl/Tk扩展提供了纯Tcl编写的megawwidgets
    ● 没有GridView~ListView,但是有一个简单的list;
    ● ComboBox是一种按钮;
    ● 默认命令是双击,但如果你希望“单击”或其他事件,那也是支持的,不过你会很难发现它们;
    ● Python将这个库选为默认的,但是一些发行版(如Pardus)并没有默认包含;
    ● 从一个组件获得返回值是通过StringVar、IntegrVar和DoubleVar类,这很令人困惑;
    ● 提供MaxOS X上面的本地外观(很久以来就是如此),使用Tile扩展实现Windows XP的本地风格,其他情况下是Win9x的风格;
    ● 在X11下并不能工作得很好。事实上,它看起来有点像Motif :-( ,看一下Tile扩展,它的目标是让Tk在X11下获得新生;
    ● Tk是工具命令行语言(豆子:原文是Tool Command Language)的一个扩展。这种语言是一个强大的跨平台脚本语言。但是不得不承认,Tcl的学习曲线很高,它是一种和C/C++完全不同的语言;
    ● 你可以把完整的Tcl/Tk应用程序包装成一个二进制文件,一个独立的Starpack,或者说是一个使用一种小巧的脚本解释器Tclkit运行的Starkit。发布就是这么简单。
 
VCF
 
    ● VCF网站:http://vcf-online.org
    ● 清晰的OO设计;
    ● 在Windows是成熟的,部分支持MaxOS X和Linux;
    ● BSD协议。
 
WideStudio
   
    ● WideStudio网站:http://www.widestudio.org
    ● WideStudio使用它自己的组件;
    ● WideStudio的安装包含在MinGW和gcc之中(不是可选的);
    ● WideStudio有一个IDE/设计器;
    ● 它的IDE/设计器有Eclipse插件版本(参见http://www.eclipse.org/dsdp/nab/);
    ● WideStudio没有控件交互的键盘导航;
    ● WideStudio的容器类不允许使用名字引用(如myWindow("labelCaption")->Test);
    ● WideStudio的库的总大小小于10M(2008-01-25),小型的应用程序的发行版小于4M。
 
什么情况下不应该使用wxWidgets?
 
    ● wxWidgets缺少创建漂亮的表格、图表的商业GUI组件。参见wxCode
    ● 不支持主题(区别于在底层使用主题的工具库),除非你使用wxUniversal或者wxSkin
    ● wxX11相比于其他的工具库只是一个子集,并且不稳定。你应当使用wxGTK,这个实现基于GTK构建,而不是直接在X11上面。wxX11更适合于没有GTK的嵌入式设备;
    ● wxWidgets试图支持大量的特性,因此,有些很少用到的组件不如经常使用的组件稳定。就像使用任何开源库一样,大量的测试是最佳的解决方案;
    ● wxWidgets没有提供任何平台的二进制发布。你不得不自己编译wxWidgets。wxpack提供了Windows平台上的wxWidgets的二进制版本,但是你需要下面几百兆的开发包;
    ● 使用本地组件使得相同的代码在不同平台表现有所不同,并且可能有一些平台相关的bugs。
 
==================================================
 
现在终于将这篇文章翻译完了。很多翻译不当的敬请谅解!虽然这是篇发布在wxWidgets上面的Wiki,但是我觉得写得还算中肯,因此是有一定的借鉴意义的。
 
这里列出了很多库,或许一些现在已经停止开发了,至少也算是见证一下C++ GUI库曾经的百家争吗、百花齐放的场面吧!呵呵…
http://blog.51cto.com/devbean/183119

wxWidgets与其他工具库的比较(下)的更多相关文章

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

    本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点.看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来——毕竟这也算是一篇官方的文章,应 ...

  2. 手把手教你使用Rollup打包📦并发布自己的工具库🔧

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  3. JHChart iOS图表工具库1.0.3新版本详解

    前言. 从2016年4月14日开始,本人着手开发了JHChart图表工具库.经过断断续续的开发,截止到现在,已经实现了折线图.柱状图.饼状图.环形图和表格样式的图表功能.为了方便使用,我已经将一个简单 ...

  4. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  5. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

  6. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  7. javaScript常用工具库

    对应于百度前端技术学院2015年春季的课程2相关内容 https://github.com/baidu-ife/ife/tree/master/2015_spring/task/task0002 ht ...

  8. boost库在windows下的编译和使用

    因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...

  9. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...

随机推荐

  1. Spark-scala-API

    1.sc.version2.集群对象:SparkContext:获得Spark集群的SparkContext对象,是构造Spark应用的第一步!SparkContext对象代表 整个 Spark集群, ...

  2. Outlook 2007 实现自动添加密送的方法

    1)在Outlook里面键入Alt+F11打开VBA编辑器:     2)激活左边的工程面板,展开并双击上面的“Project (VbaProject.OTM)/Microsoft Office Ou ...

  3. [Python]小百合十大爬虫

    国庆几天在家看了几篇关于使用Python来编写网络爬虫的博客,想来自己断断续续学习Python也有几个月了,但一个像样的程序都没有写过,编程能力并没有得到提高,愧对自己花费的时间.很多时候虽然知道什么 ...

  4. Qt打包部署程序自动查找依赖DLL工具windeployqt

    qt编译好一个exe程序之后,部署到一台没有开发环境的机器上,需要一起拷贝其依赖的dll文件.这时需要一个windeployqt工具来帮忙,因为手动拷贝的话容易遗漏. https://blog.csd ...

  5. [SublimeText] 之 Packages

    概述 Packages 是指供 Sublime Text 使用的资源文件集合,例如插件.语法高亮.菜单.片断等等.Sublime Text 自身安装了一些 Packages,还有很多用户创建的 Pac ...

  6. 使用react进行父子组件传值

    在单页面里面,父子组件传值是比较常见的,之前一直用vue开发,今天研究了一下react的父子组件传值,和vue差不多的思路,父组件向子组件传值,父通过初始state,子组件通过this.props进行 ...

  7. Struts2(三)配置详解

    一.概述 Struts2提供了多种可选的配置文件形式. 其中,struts-default.xml和default.properties是框架级别的配置文件,这两个文件在Struts的核心JAR包中, ...

  8. Use Reentrant Functions for Safer Signal Handling(译:使用可重入函数进行更安全的信号处理)

    Use Reentrant Functions for Safer Signal Handling 使用可重入函数进行更安全的信号处理 How and when to employ reentranc ...

  9. 转载>>ASCII、UTF8、Uncicode编码下的中英文字符大小

    原地址:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part2.aspx ASCII.UTF8.Uncicode编码 ...

  10. 免费的Web服务

    这个网站包括和很多免费的Web服务,比如传说中的天气预报.手机号归属地.IP地址归属地.列车时刻表.邮箱验证.验证码图片生成.还有什么股票,基金 http://www.webxml.com.cn/zh ...