现在Qt已经发布了LGPL版本,相比wxWidgets,你会推荐使用它吗?

27

我是一个wxWidgets的重度用户,部分原因是出于许可证方面的考虑。

  • 你如何看待Qt最近发布LGPL许可证的最新公告,对wxWidgets的未来前景有何影响?
  • 您认为wxWidgets仍然是新项目的良好技术选择吗?还是您建议采用Qt,因为它将成为事实上的标准?
  • 我也对这可能对最常见的脚本语言绑定(例如PyQt、wxPython、wxRuby)产生的影响感兴趣。为什么PyQt拥有专业级别的设计师,而wxPython没有,但PyQt使用率却很低?

相关:

https://stackoverflow.com/questions/443546/qt-goes-lgpl-on-windows-is-it-good-enough-to-use-instead-of-mfc

7个回答

17

对于那些因为wxWidgets是一个跨平台库,并使用原生控件以获得适当的外观和感觉而被吸引的人来说,Qt的许可证变更几乎没有任何影响。

编辑:

关于

Qt没有真正的本地端口,而是使用本地绘图函数

让我引用比较工具包的wxWidgets维基页面:

Qt没有像wxWidgets一样的真正本地端口。我们的意思是,尽管Qt绘制它们相当逼真,但Qt在每个平台上都会绘制自己的小部件。值得一提的是,Qt附带了特殊的样式,用于Mac OS X和Windows XP和Vista,这些样式使用本地API(Mac OS X上的Appearance Manager,Windows XP上的UxTheme)绘制标准小部件基元(例如滚动条或按钮),就像任何本地应用程序一样。事件处理、生成的视觉反馈和小部件布局始终由Qt实现。


1
据我所知,他们只使用本地绘图功能,但自己实现控件。这可能会产生接近本地的外观,但永远无法给人本地的感觉。它也注定会在更新的操作系统版本上出现问题。 - mghie
1
我不知道“native”这个词对你来说有什么特殊的含义 - 但我们不必深究。wxWidgets在Mac上的外观确实有些欠缺,但是SVN主干中的代码基于Cocoa而不是Carbon,所以这是一个将会得到改善的方面。 - mghie
我不了解Windows,但Qt/X11现在包括QGtkStyle,它使用Gtk+来绘制所有元素(颜色和图标)。http://doc.trolltech.com/4.5/qmaccocoaviewcontainer.html http://doc.trolltech.com/4.5/qmacnativewidget.html http://doc.trolltech.com/4.5/qgtkstyle.html - ephemient
@ephemient: 但这只是外观,而不是外观和感觉。这并不是使用本地小部件,而只是使用标准系统设施来绘制非本地小部件以本地风格。这不是我所说的“使用本地小部件”。 - mghie
在X11上,实际上并没有所谓的“本地”——每个人都会自己绘制。请注意,QGtkStyle也使用Gtk+对话框,而不是Qt对话框。在Mac上,默认情况下,Qt借助http://developer.apple.com/mac/library/releasenotes/Carbon/HIToolbox.html绘制自己的小部件,但是有http://labs.trolltech.com/blogs/2009/04/17/mac-widget-style-addons/正在进行的工作,以完全使用Cocoa绘制一些小部件。 - ephemient
显示剩余6条评论

13

我目前在工作中使用的是pyqt,并且我非常满意。我认为它有更好的文档(在我看来),更好的事件管理(信号和槽模式比旧的简单回调风格更强大),并且在诸如qt-designer之类的图形设计师中导入自定义小部件比wxpython的任何对应方案(如Boa Constructor和pyGlade)都要容易得多。

据我所知,qt-designer比任何wxpython的对应方案都更为强大,例如Boa Constructor和pyGlade。您还可以很好地支持将程序字符串翻译成不同的语言(至少比wxLocale更好的支持),而且您可以使用诸如Qt-Linguist之类的工具,这些工具完全集成在qt系统中。

我在一些业余作品中使用wxpython,但我在那里仍然是一个新手。我认为它比pyqt更大的优势是在不同平台上具有本地外观和感觉。如果您正在开发Windows / Linux应用程序,这是一个巨大的优点。实际上,你可以使用“换肤”功能在Windows-qt应用程序中获得本地外观和感觉,但是我不知道如何实现这一点(抱歉,我从未在Windows上使用过qt:D)。


8
说实话,我不认为人们会大规模转向WxWidgets。
对于Python来说,有PyQt绑定和WxPython绑定。尽管Qt比WxWidgets更实用,但大多数GUI Python开源程序都是使用WxWidgets编写的。由于这些程序是开源的,GPL与LGPL在他们选择工具包时并不重要。
同样适用于Gtk。许多开源应用程序在Windows上使用Gtk编写,尽管在Windows上使用Gtk非常困难。使用Qt,这些应用程序将更容易在跨平台基础上维护,但这并没有发生。
因此,工具包的选择受到许多参数的影响,许可证只是其中之一。
我仍然不明白为什么Qt不更流行,因为它是我认为编写的最简单、最实用的GUI工具包。

许可证确实很重要!如果您开始编写软件,不一定会从一开始就考虑开源。因此,您会选择使用LGPL库。这就是为什么Qt不是主流,以及为什么大多数开源Python程序使用wxpython,即使没有专业级别的设计师也是如此。 - Mapad
也许即将发布的Qt 4.5会解决这个问题。它将提供LGPL许可选项。 - casualcoder
@Mapad,你是在说Robin Dunn不专业吗?! - Alec Teal
自从我发表这条评论以来,很多事情已经发生了改变:1. PyQt自Python 3.0的第一个Alpha版本开始就与Python 3.x兼容,而WxPython在Python 3.4即将推出时仍然不支持Python 3。这将加速PyQt的采用并展示PyQt的动态性。2. 几个项目已经从Gtk转向Qt和PyGtk转向PyQt,显示Qt变得更加成熟。3. Qt现在支持更多平台(移动设备等),而Wx似乎停滞不前。 - Philippe F

8
请注意,自2009年1月起,尽管Qt 4.5将在LGPL下提供,但Riverbank Computing尚未就PyQt的未来版本的许可证发表任何声明。 PyQt仍然只有商业/GPLv2/GPLv3许可证。
正如本答案的评论中所指出的,诺基亚于2009年8月宣布了采用LGPL许可证的PySide项目。

1
是的。但是仅需支付PyQT(£350),与以前额外支付$4,000的QT相比,这仍然是一个巨大的变化。 - Mapad
2
现在有PySide:http://www.pyside.org/ - dugres

3

Qt是一个非常全面和高质量的框架。我相信许多原本会使用wxWidgets的新项目现在会选择使用LGPL Qt。但是已经在使用wxWidgets的项目无疑会继续使用wxWidgets,而不是进行大规模重写。


是的,我们公司也是这样。他们打算使用Qt。我读到从版本4开始,Qt也可以使用本地小部件。所以它看起来还不错 :) - Johannes Schaub - litb

3

我选择wxPython有两个主要原因:

  1. Boa Constructor,虽然它仍是 beta 产品,但它让我统一控制了整个过程的100%,而 PyQt 确实有更好的设计师,但在编辑“事件处理程序”方面却没有连接。

我的理想 IDE 设计可以创建事件,让我编辑所需的功能代码并运行,而无需“编译 UICs”,无需切换编辑器,也无需进入命令行。虽然对于大型应用程序来说这并不重要,但我目前的领域是快速和小规模的程序。

  1. 许可证...现在还不重要,但一旦我开始在小规模上销售我的东西,它就会变得重要。

  2. QTDesigner 中的事件功能代码内自动完成似乎不起作用。我可能遗漏了一些东西,但上述“破碎”的过程阻止它成为 RAD。


但 Boa Constructor 的缺点(而且这是一个相当大的缺点)是,当您更新 wxPython 时,必须手动更新所有小部件,因为 Boa 解析 Python 源代码(而不是将小部件和属性分别存储)。尽管它是一个很棒的(免费)应用程序,但可以尝试使用 PyQt 的 ERIC... - Nick

2
我从未能够成功设置Qt进行交叉编译。我记得看到Trolltech的一些内容说他们不正式支持交叉编译,尽管现在我找不到它了。
有许多指南和说明如何使Qt进行交叉编译,所以很可能是我做错了什么。
在选择框架时,我建议考虑并测试其交叉编译能力。

真的吗?"交叉编译"是什么意思?您是指在一个特定架构上为多个目标架构编译,还是在各自的架构上编译代码? - d-_-b
@sims,针对多个系统进行编译。我记得 Trolltech 以前说过这样的话,但现在找不到了。不管怎么样,在网上有很多关于如何使用 Qt 进行交叉编译的文档。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接