GTK+
● GTK+本来是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GUI库;
● GTK+已经被移植到Windows,VMS以及其余的系统上面(在MacOS X上面如今能够经过苹果的X11应用程序实现,其本地版本正在开发之中),使用相同的API。可是,GTK+的设计初衷是Unix,多平台的开发是后来才加入的;
● GTK+是GNOME用户界面的原始构建库;
● 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;
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自己;
● 参见<a title="WxWidgets" for="" mfc="" programmers"="" href="http://wiki.wxwidgets.org/WxWidgets_For_MFC_Programmers" target="_blank" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(67, 67, 67); text-decoration: none; ">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
● 清晰的OO设计;
● 在Windows是成熟的,部分支持MaxOS X和Linux;
● BSD协议。
WideStudio
● WideStudio使用它本身的组件;
● WideStudio的安装包含在MinGW和gcc之中(不是可选的);
● WideStudio有一个IDE/设计器;
● 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库曾经的百家争吗、百花齐放的场面吧!呵呵…