你使用Qt吗?为什么会选择使用它?

31

优缺点是什么?你使用了多长时间?关于Jambi呢?

8个回答

31

我已经使用Qt进行商业开发数年,并对其非常满意。

Qt的好处之一是它提供了一系列库,以及GUI(例如XML解析、线程和网络),所有这些都具有一致的风格,并且都是跨平台的。这意味着我们很少需要使用其他库,尽管我们确实使用boost进行某些操作。

对我们来说另一个非常重要的因素是国际化。在之前基于MFC的应用程序中,我们必须维护两个本地化版本,支持的两种语言。在基于Qt的应用程序中,我们只有一个版本。

  • Qt翻译系统使用Linguist非常容易使用,并使支持多种语言变得容易(当然你仍然需要翻译字符串,这是一项艰巨的工作!)。
  • GUI布局系统中,窗口小部件根据布局自动调整大小,这使得一切都变得更加容易。在不同的语言中,字符串的长度是不同的。使用固定大小的小部件(如MFC)每个对话框都需要根据每种语言进行调整,否则标签的某些部分将被裁剪。使用Qt,它们会自适应调整大小。当然,在某些情况下,它不会完全适用,但它仍然使一切变得更加容易。
  • QString在Unicode中完成所有操作,并且非常容易处理来自不同编解码格式的转换。

一个非常有价值的事情是可以访问源代码,尽管这对Qt并不是唯一的。在几个场合中,检查Qt源代码帮助我们说明了一些奇怪的行为或者提供了实现某些功能的线索。

我们在Qt中发现了一些bug,其中一些在向Trolltech报告后得到了修复。在另一些情况下,他们建议使用一种变通方法。这些问题都相当难以理解,没有对我们的开发产生重大影响。

Qt的主要缺点之一是缺乏用于商业应用程序的第三方库。但是,Qt相当完整,因此对我们来说这并不是一个大问题,尽管这将取决于您正在开发哪种类型的应用程序。

我也没有使用Jambi。


嗨,大卫,你所提到的第三方库是什么?你能给我一个例子吗? - RK-
我一个月前开始使用Qt,使用新的Qt Quick。到目前为止,最大的抱怨是如果你犯了一个错误,它不会抛出异常或报告错误,只是不能完成你想做的事情,没有任何提示,告诉你哪里错了。还有很多其他严重的问题。 - Mitch
也许这应该是一个不同的问题,或者这个问题太广泛无法讨论,甚至对于这个网站来说都不是主题,但是软件翻译有时候不仅仅是字符串的翻译吗?有时候可能需要改变用户的工作流程。例如,有时我发现在 Windows 给出一些消息时,没有合适的俄语翻译...哦,这个软件已经被翻译成了俄语,但那只是一个玩笑而不是翻译...我不确定,因为我没有翻译软件的经验,但我想看看。 - Evgeniy
目前 Qt 允许使用 LGPL(这意味着我们甚至可以免费将其用于商业应用,只要我们发布对 Qt 本身的更改) - Top-Master

12

我在七年的时间里,在几个平台上使用了Qt做了几个c++项目。我认为它工作得很好,在Mac上开发一个像样的GUI应用程序比当时学Objective-C更容易。

我认为信号/槽机制有点复杂,但并不可怕。一旦你使用它一段时间后,它就不会阻碍你了。连接方面很容易出错(至少曾经如此),检查这些返回值总是很好的,因为你的应用程序会继续运行而不告诉你它没能成功。

我从未使用过jambi。


8

以下是我对Qt的优缺点:

优点:
跨平台
我知道这是常用的一种说法,但在使用Qt在Windows和Linux之间来回切换后,惊讶的发现要使其工作起来所需付出的努力是如此之少。我认为这得益于我只使用Vim与Qt Designer配合使用。

QMake
这是我最喜欢的Qt方面之一。在使用wxWidgets、FLTK等进行开发之后,我厌倦了不同构建系统的繁琐操作,也不想手动创建makefile文件。目前除了Qt外,我在其他任何地方都使用CMake,但我认为我正在逐渐将Qt迁移到CMake上。然而,使用QMake非常容易就能开始运行。

QTestLib
我查看了几个其他C++单元测试框架,当我使用QTestLib创建测试时,感觉非常类似于NUnit(C#),并且几分钟内我便有了几项通过的测试。我还注意到非常容易创建自己的持续集成环境。

生产效率接近Java和.NET
我听到/阅读过有人说C++比Java或.NET更低效。从个人经验来看,使用Vim和Qt Designer可以在Qt中快速实现应用程序的原型,而在Eclipse或Visual Studio加载之前。我还能获得与.NET或Java中非常相似的库集,如果没有,我可以利用现有的C++代码。

缺点:
价格
这是我目前能想到的最大因素。然而,如果我不打电话给销售代表就不知道要积累多少分才能购买许可证了。我曾经在他们推出小企业折扣时购买了一份许可证,那个时候它是值得付钱的,我觉得现在的价格可能是三倍左右。

只有商业许可证才能在任何地方进行开发
我很想能够在任何平台上进行开发,但只为另一平台构建和销售(应用程序)。例如,在Linux上开发,然后在只有Windows商业许可证的情况下构建和部署。据我所知,您只能在拥有许可证的平台上开发和构建商业应用程序。

供应商锁定
嗯,这更像是个人的缺点。我不喜欢被绑定在特定的供应商身上,因为公司方向和产品方向会让我分散注意力。TrollTech被Nokia收购了,这是好还是坏我不知道,但这样大的一家公司可能会做出恶意的事情。

我想我现在做完了 :).哦,我没有使用过Jambi,但我非常有兴趣进行几个原型项目,以找出使用C++插件与Jambi一起使用作为Web界面有多容易。
说实话,我没有仔细研究过它,所以它可能很难或者很容易。

5
什么收费?现在它是LGPL,而GPL从第一天起就存在了! - fengshaun
2
最初它是每位开发者在Windows上超过2500英镑,然后在Linux上采用了GPL(如果你正在开发商业应用程序,这并没有太多帮助),大约一年前变成了LGPL。 - Martin Beckett

5
我在之前的工作中使用过Qt。几年前我只是简单接触了一下Qt,所以基本上可以说我是Qt新手。
当我开始工作时,我被告知要选择语言和环境,但跨平台支持是可取的。我尝试了Qt和Java,甚至试用了C#。我给自己两天时间评估每个选项。
也许我的历史作为C ++开发人员略有偏见,但在研究了每个选项后,Qt是唯一一个显示出任何有用性而无需长时间学习曲线的选项。
Qt提供的文档和示例应用程序使经验丰富但是刚接触Qt的开发人员很容易快速上手。在我的试用期结束时,我已经完成了最终应用程序的UI原型/模型。对于Java / Eclipse,Java / SunStudio和C#/VS.net,我在那段时间内无法处理任何非平凡的事情。
信号/插槽需要一些时间来适应,但并不太难,我编写了一些简单的包装器,在连接失败时断言以防止愚蠢的错别字使应用程序停止工作。
我喜欢的另一件事是,Qt几乎拥有我所需的所有东西。您想要的-存储,网络,GUI,线程,容器-Qt都有处理它的类。在我看来这很重要,因为混合库有时会引起问题。
拥有Qt源代码是一个大的优势,一个是出于兴趣,另一个是它允许我使用我选择的编译器和设置编译Qt,包括用于开发期间的调试版本。
我还发现Trolltech的支持相当不错。我提出了几个关于Qt的错误,其中一个在我仍在进行项目时已经得到修复和发布(只是为期6个月的工作)。
我唯一能想起的负面因素是调试Qt对象的困难(使用VS)-有一个Qt插件可以检查Qt对象,但我使用的是免费版本的VS,插件无法使用。但这不是Qt的错。
我没有使用过jambi,所以无法评论。

3

在C++中,你唯一的其他选择是MFC和wxWidgets。 QT / wxWidgets主要取决于个人喜好。我认为QT具有清晰的设计和良好的文档。
如果你不使用GPL,QT的成本大约相当于一个月的开发者工资。


1
当然,除了MFC和wxWidgets之外还有其他选择!例如,有WTL! - Johann Gerell
WTL相当于被遗弃的软件,而且与MFC过于相似,让人感到不舒服 - 不确定除了小型实用程序之外,我是否会选择它。 - Martin Beckett
1
还有许多其他的工具包。特别是Fltk、Gtk都有C++绑定,但任何带有C绑定的GUI工具包都可以使用。 - Ben Collins

3

我已经使用Qt两年多了。

我喜欢Qt的几个方面:

  • 相对于MFC,易于GUI编程,Qt Designer
  • 良好的容器类
  • 优秀的图形场景框架
  • 有用的示例和卓越的文档支持
  • 翻译支持
  • 良好的技术支持

我强烈推荐参加Qt开发者大会。如果你有机会参加,请务必去!那里有很多有趣的演讲。


0

Qt是一个非常好的库,但它有昂贵的每个开发者许可证费用,因此并不总是适用于所有项目。


3
Qt不是一个库,而是一个框架。 - nbro

-1

不过不要使用它...

优点: QT有一个可选的三阶段布局,而WX目前只允许两个(我相信他们计划做三个阶段,只是还没有实现)。

使用布局的一个更大的问题之一是静态文本和换行。WX会问你的最小宽度/高度是多少,并分配屏幕,QT有一个选项可以说你想要多宽,如果你的X宽度有多高需要。这使您能够更好地表达页面的流程。


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