WxWidgets与其他工具包的比较(15种方案)
一些一般注意事项:
- wxWidgets不仅适用于C ++,而且具有python,perl,php,java,lua,lisp,erlang,eiffel,C#(.NET),BASIC,ruby甚至javascript 的绑定(有关绑定,请参见 常规信息)。
- 它是最完善的GUI工具包之一。有许多实用程序类。
- 有很多文档(尽管有些地方有些零散)。
- 免费供个人和商业使用。
- wxWidgets尽可能使用本机平台SDK和系统提供的窗口小部件。这意味着在Windows上编译的程序将具有Windows程序的外观,而在Linux机器上编译时,它将具有Linux程序的外观。
- 一个积极的副作用是wxWidgets因此更有可能看起来,表现和感觉像原生的-有时包括免费的原生功能(例如,可能在OS X的所有文本区域都内置了拼写检查功能)。
- 这样做的负面影响是平台之间的行为更有可能不同。小部件轻巧的工具箱失去了某些本机特性,但也最小化了平台特定的代码(因此,将平台之间不同行为的风险最小化,并将平台特定错误的风险最小化了)。专注于本机外观还意味着wx可能不是最适合想要自定义外观而不是系统主题的应用程序。
- wxWidgets因大量使用宏(尤其是事件表)而广为宣传。但是要注意,通常存在非宏替代方案,并且wxWidgets 2.9(3.0)特别努力地提供了替代旧的基于宏的技术替代方案,而是使用了模板等更现代的技术。因此,尽管您可能会发现许多包含宏的旧代码,但不要让wapWidgets可以提供所有这些使您确信
还有一个 关于跨平台gui工具包的 slashdot线程。尽管它很旧,而且很好用,但它可能是一些斜线:),但那里可能有一些有用的见解。
内容
[ 隐藏 ]Qt的
- Qt(http://qt.nokia.com/)和wxWidgets都具有许多与GUI不相关的类,例如日期/时间,容器,网络和OpenGL功能。
- Qt4.5在LG PL和商业许可下可在MS Windows,Mac和GNU / Linux上使用。wxWidgets的所有端口均在许可的经过修改(但经过OSI明确许可)的LGPL下分发,该LGPL允许开发和分发专有应用程序而无需支付许可证费用。
- Qt不像wxWidgets那样具有真正的本机端口。Qt不使用系统提供的小部件,而是使用主题进行模拟。我们的意思是,即使Qt非常逼真地绘制它们,Qt也在每个平台上绘制自己的小部件。值得一提的是,Qt带有Mac OS X,MS Windows XP和Vista的特殊样式,这些样式使用本机API(例如Mac OS X上的Appeareance Manager,Windows XP上的UxTheme)绘制标准的窗口小部件原语(例如,滚动条或按钮),就像任何本机应用程序。事件处理,产生的视觉反馈和窗口小部件布局始终由Qt实施。
- wxUniversal实现了一种类似于Qt的方法。
- 应该注意的是,在用于嵌入式Linux平台的KDE和Qt上,Qt 是 本机GUI库。
- Qt通过所谓的MOC扩展了C ++语言,以提供诸如信号槽之类的附加功能。一个优点是信号时隙事件处理的好处。缺点是,这会侵入您的构建系统并利用非标准语言功能。wxWidgets不会扩展C ++语言,因此对构建系统的干扰可能较小,对于期望使用标准C ++的开发人员而言,可能不会感到惊讶。
- Qt具有基于GNU / Linux和帧缓冲的全功能嵌入式GUI(嵌入式Linux Qt)。这意味着一旦将Linux与/ dev / fb结合使用,便可以轻松运行示例。与X11相比,嵌入式Linux的Qt占用空间小。
- 有很多用于Qt,QtDesigner,QtCreator,QDevelop,Edyuk的IDE,以及与流行的IDE(例如Visual Studio,Eclipse和XCode)的集成(尽管还有 一些 用于wxWidgets的IDE)。
- Qt提供可靠的商业支持(但wx也是如此,请参阅 http://www.wxwidgets.org/support/support.htm)
- 为了实现基于Qt的wxWidgets端口的目的,已经做了很多工作(请参阅wxWidgets SVN wxQt分支),因此不需要wxWidgets应用程序使用 GTK-Qt (众所周知,它也无法正常工作)很好)来构建对KDE用户而言是本机的应用程序。
FLTK
- FLTK网站:http://www.fltk.org/
- wxWidgets具有更成熟的OO设计。
- FLTK的重量更轻,而wxWidgets的功能更全(wxWidgets支持联网,打印等,而FLTK仅支持或不支持这些功能)。请参阅wxWidgets功能列表(http://www.wxwidgets.org/about/feature2.htm)与FLTK功能列表(http://www.fltk.org/documentation.php/doc-1.1/intro.html#2_2)。
- FLTK实际上具有更复杂的,不同的窗口小部件类型。只需将您可以将FLUID中的功能与wxDesigner或DialogEdit进行比较。我将FLTK应用程序移植到wxWidgets,并且很难模拟按钮。
- FLTK修改后的LGPL许可证比wxWidgets许可证更具限制性,尽管它确实提供了静态链接的例外。
- 用于GUI设计的称为FLUID的Light IDE(http://www.fltk.org/documentation.php/doc-1.1/fluid.html)。
狐狸
- FOX网站:http : //www.fox-toolkit.org/
- FOX的重量更轻,而wxWidgets的功能更全。
- wxWidgets具有更完整的API,而FOX主要专注于GUI功能。
- FOX在每个平台上绘制自己的窗口小部件,而不是使用本机窗口小部件(例如Qt),而wxWidgets为所有受支持的平台提供了真正的本机端口。因此,FOX可能会更快,但是提供的外观可能无法很好地集成到目标平台中(例如,Windows XP主题当前不可用)。
- FOX缺乏对亚洲语言的打印和I18N支持(内部使用UTF-8)。
- FOX不支持标准Windows对话框,但是可移植的类似功能可用。
Java GUI工具箱
- Java是一种编程语言,可以与不同的GUI工具包结合使用,例如
- wxWidgets被编译为机器代码。SWT,Swing和Qt也是如此。但是,对于wxWidgets,其余应用程序代码可以编译为机器代码,而在Java应用程序中,它将被解释为代码。但是,SWT现在也具有C ++绑定。
- 关于Java应用程序的性能(速度)的说法不一。Java应用程序通常比C / C ++应用程序使用更多的内存。
- 基于Java的应用程序的用户必须安装JVM。近年来,随着越来越多的计算机安装了JVM,这已不再是一个问题。但是,具有较早JVM的用户可能会遇到性能/安全性问题。
- wx4j是Java的wxWidgets实现。wx4j是Java的wxWidgets绑定,它允许Java程序员保留其Java语言,但仍具有C ++编写程序的速度。
- wxWidgets可以被多种编程语言使用,并且易于集成。Java GUI工具箱只能由JVM中的编程语言(例如Java,JRuby,Jython,JavaScript,BeanShell)使用。
- Java程序可以通过Webstart轻松部署,从而允许用户试用应用程序( 例如,请参见 http://jabref.sourceforge.net/)。
需要更具体地声明以下权利要求:在此讨论哪个Java GUI Toolkit?
- 为了实现跨平台,Java通常以最小公分母为目标。Java API排除了仅在一个平台上可用或相关但在其他平台上不可用的功能。示例包括操纵Windows任务栏,Mac OS菜单栏,Unix文件属性等。
- 上面的陈述的推论:在wxWidgets程序中,您总是可以在需要的情况下在ifdef内编写一些特定于平台的代码,以使其仅在该平台上进行编译。在Java中,没有ifdef的等效项,您必须跳过循环才能访问外部API。而且,wxWidgets模拟了在不同平台上不可用的某些功能(例如MDI和树控件)。
SDL
- http://www.libsdl.org
- SDL(简单DirectMedia层)是一个多媒体C库,更适合您在编写游戏等时需要自定义的内容,而又没有方便的通用UI元素。它由许多以SDL_开头的C结构组成。
- 可以使用wxWidgets和SDL进行组合:http : //code.technoplaza.net/wx-sdl/
- 在LGPL版本2下。
- 只允许打开一个窗口。
- 很好的OpenGL集成(或基于OpenGL构建的库,例如OpenSceneGraph,CEGUI)
SFML
- http://sfml.sourceforge.net/index.php
- SFML(简单快速多媒体库)是一个多媒体C ++库,更适合您在编写游戏等时需要自定义的内容,而又没有方便的通用UI元素
- 它涵盖了很多东西,例如:音频,网络或线程...
- 可以使用wxWidgets,Qt,X11等进行组合。
快板
- http://alleg.sourceforge.net
- 就像SDL一样,Allegro是一个跨平台的c库(在后端使用了大量的汇编程序),用于编程游戏。
- 几乎和wxWidgets一样古老(大约在1993年)。
- 礼品软件许可证(基本上是公共领域)。
- 需要gcc和汇编器才能构建。
- 多年来,开发一直被困在同一个版本中,缺少核心开发人员(原始开发人员不再在团队中),并且存在一些内部纠纷可能导致分叉。
- 非常基本的GUI功能-仅支持一个窗口,仅支持裸露的操作-您无法移动窗口等。
- “控件”也通过带有(许多)可变长度参数的函数在Allegro中得到支持,并且所有者的绘制很像QT(但默认情况下看起来不那么好)。可以通过一个相对简单的API来自定义它们(并且有一些子库已经具有某些合理的版本)。
- 绘图例程比wx快得多,并且有一个opengl层(allegrogl- http ://allegrogl.sourceforge.net/ )使使用opengl进行绘图比开始时更加容易。
- 非GUI例程(输入等)是低级的,并且通常比wxWidgets的本机实现快。
- 可以与wxWidgets一起使用,不会有太多麻烦-由于allegro具有一些特定于平台的功能来获取窗口句柄,因此您可以从窗口句柄创建wxWidgets窗口,然后从该点开始执行所需的操作。尽管wxWindows使用wxApp处理特定于平台的main / WinMain东西,但Allegro要求您将END_OF_MAIN()放在主要功能之后-使两者一起工作在某种程度上是一项任务,但不是一个很大的任务。
GTK +
- http://www.gtk.org
- GTK +,最初是Gimp工具包,是用于Unix系统的LGPL C语言GUI库。
- 它已使用相同的API移植到Windows,VMS和其他系统(当前可通过Apple的X11.app进行开发的MacOS X,本机版本正在开发中;两者都很难构建,尤其是打包)。但是,主要的开发和重点是Unix,而多平台开发则主要是事后的想法。
- GTK +是用于在GNOME中构造用户界面的主要库。
- 与wxWidgets不同,GTK +支持C(并且有一个称为GTKMM的C ++包装器,http: //www.gtkmm.org )
- 它基于通用库glib构建(在某些方面类似于C ++ STL,它提供了一些数据结构,功能以帮助进行内存管理等)。
- 它在所有平台上的外观和行为都完全相同(除非使用主题)。在Windows上,它具有使用Wx 主题(使用UxTheme)的原始外观的 功能。
- 在Windows上不使用系统提供的窗口小部件,而是使用主题进行模拟。
Kylix的
- 对于Borland / Inprise来说,Kylix并没有取得太大的成功,因此怀疑它将持续多长时间是值得怀疑的。
- Kylix基于Qt,请参见上文:)
- Kylix支持更少的平台
- 基于不少于3个工具箱的IDE相当不专业。
拉扎勒斯
- Lazarus是一个跨平台的开源RAD IDE,也是编写GUI软件的库
- Lazarus主要与Borland Delphi兼容,并且两者都可以编译相同的代码
- Lazarus具有数据感知组件,可轻松进行本地和客户端服务器数据库应用程序开发
- 它仅支持多种(对象)帕斯卡方言的语言
- 它以类似于wxWidgets的方式工作,它支持许多底层的小部件集:gtk1,gtk2,win32api,qt,carbon和winCEapi。存在可可和所有者绘制的窗口小部件集(fpgui),但进展较慢。
- 底层的Free Pascal编译器支持当前使用的大多数操作系统和体系结构
- 当前,它支持的平台少于wxWidgets
- Lazarus / FPC组合项目在一个项目中包含几乎完整的深度集成工具链。RAD / IDE,编译器,库,XML绑定,数据库连接,
- Lazarus逐渐受到Borland / Embarcadero Delphi组件市场的支持,提供了复杂且高质量的商业小部件。
终极++
- Ultimate ++仅支持Windows和Linux,不支持MacOS
- http://upp.sourceforge.net/www$uppweb$vswx$en-us.html上的比较 是一个小例子,没有显示工具包如何扩展到更大的应用程序。
接触
- 请参阅:http: //sourceforge.net/projects/notus
- wxWidgets实际上存在;)
- notus可能会更多地使用标准库和现代C ++概念,例如迭代器,模板,名称空间等(而wxWidgets以非标准方式重新实现或解决了许多此类问题);而且它还可能遵循Boost的设计原则(您可以将其视为好事或坏事),并且可以与Boost库的其余部分很好地配合使用。当然,由于它尚不存在(在alpha阶段仍为*),因此在实践中是否成立尚待观察。
MFC
- MFC仅对Windows免费提供
- Macintosh版本在Visual C ++ Crossplatform Edition中可用(最后检查为800美元),但是自4.1版以来,编译器不支持该版本。
- 还有诸如MainWin之类的UNIX变体,它们非常昂贵,需要运行时许可证,并且据报告支持问题
- 虽然可以使用wxWidgets和MFC的源代码,但是EUx并不是wxWidgets的问题。
- MFC的可执行文件大小比wx小(通常与良好的编译器无关)。
- MFC具有更多种类的优质商业组件。
- 有人说事件表(wxWidgets)比消息映射表(MFC)“更好”。
- wx的类层次结构更直观,而MFC往往在顶级类名之间更加一致。
- wx提供了更多的便利类,而MFC提供了更多的Windows特定类。
- .NET不是问题-MFC不会移植到.NET。另一方面,wx在alpha阶段已经具有.NET包装器!
- MFC具有更多可用组件,尤其是数据绑定控件。
- 使用wxWidgets可以轻松完成某些事情,例如某些类型的窗口(始终在顶部等),而使用MFC则更轻松一些,例如可分离的工具栏。
- 使用MFC的最强之处可能是MSVC(IDE)本身。
- 有关类名和其他要点的信息,请参见 MFC程序员的WxWidgets。
XUL框架(Mozilla)
- 请参阅:https: //developer.mozilla.org/en/XUL
- 要在Mozilla中进行编程,都需要JavaScript,XUL和CSS - XUL描述了结构(例如Web文档中的HTML,JavaScript的行为,样式CSS);wxWidgets用C ++完成所有这些工作。
- 用C ++(XPCOM)访问XUL非常困难。wxWidgets中的C ++更容易。
TK
- Tk是为Tcl脚本语言设计的GUI工具包,最好与该语言一起使用。有关 更多信息,请参见:http : //wiki.tcl.tk。
- 还有其他语言的绑定,例如Python,Perl,Ruby和C ++。
- Tk的核心只有几个小部件,但是有几个扩展可用。例如:BWidgets。有一些用C或纯Tcl编写的扩展名。
- 在8.5版之前,Tk看起来已经过时了。现在,它已在Windows和Mac OS X上使用tile扩展程序解决,并已作为ttk添加到Tk 8.5内核中。现在在这些平台上具有本机外观。在Linux上,尽管它仍然具有旧外观。这项工作正在进行中,因为他们正在为GTK和Qt创建主题。您仍然可以使用其他主题来使其看起来更好。
- Tk是Python的默认GUI工具包。该绑定称为Tkinter。请参阅:http: //wiki.python.org/moin/TkInter
- Tk具有功能强大的画布小部件,可让您绘制任何内容,甚至创建自定义小部件。
- Tk具有强大的事件系统。
- 由于API很简单且GUI代码通常较短,因此Tk由多个程序员使用,而无需GUI设计人员。尽管有几个GUI设计器。带有“ Hello world!”的窗口 在它上面是一个内衬:pack [ttk :: label -text“ Hello world!”]
- 用Tcl / Tk开发的完整GUI程序可以包装在一个名为Starpack的单个二进制文件(大约1 mb)中,并部署到所有主要平台上。有关 更多信息,请参见 http://equi4.com/tclkit/。
- Tk拥有非常宽松的BSD许可证,可以进行商业软件开发。
为什么要使用Tk?如果您想要一个免费,成熟,稳定,跨平台的GUI工具包,并且正在使用脚本语言。
为什么不应该使用Tk?如果您打算使用C ++或需要更大的默认窗口小部件集,则最好使用WxWidgets。
VCF
- 请参阅:http : //vcf-online.org/ 或 http://sf.net/projects/vcf
- 干净的OO设计
- 在Windows上成熟,对MacOSX和Linux的一些支持
- BSD许可
WideStudio
- 请参阅:http: //www.widestudio.org/
- WideStudio使用自己的小部件
- WideStudio安装与MinGW和gcc捆绑在一起(非可选)
- WideStudio带有IDE / Designer
- 有一个针对Eclipse的IDE / Designer插件项目(本机应用程序生成器)(请参阅:http : //www.eclipse.org/dsdp/nab/)
- WideStudio没有集成的控件进行键盘导航
- WideStudio容器类不允许按名称引用(myWindow(“ labelCaption”)-> Test)
- WideStudio库的总大小小于10MB(2008-01-25),对于小型应用程序,分发包的大小可以小于4MB
为什么不应该使用wxWidgets
- 缺少用于制作漂亮的GUI网格,图表等的商业GUI组件 。不过请看 wxCode。
- 除非您使用wxUniversal或wxSkin,否则不支持主题(除了使用基础工具包的主题之外)
- 与其他工具箱相比,wxX11较差,并且不稳定。您应该改用wxGTK端口,该端口建立在GTK之上,而不是直接在X11之上。wxX11主要用于没有GTK的嵌入式设备。
- wxWidgets尝试支持非常广泛的功能集,结果,该工具箱中一些使用较少的组件并不像常用组件那样稳定/可靠。与任何开源工具包一样,全面的测试是这里最好的解决方案。
- wxWidgets不为任何系统提供二进制文件。您必须自己编译wxWidgets。 wxpack 为Windows提供了wxWidgets二进制文件,但是您必须下载整个数百兆的开发套件才能获得它们。但是,您可以通过下载相对较小的WxDev来下载C ++ IDE加WxWidget。 C和C ++均支持WxDev。
- 使用本机窗口小部件使同一代码在不同平台之间的行为更有可能发生,并且也更有可能存在特定于平台的错误。