我应该选择什么:GTK+还是Qt?

104

有人能建议一下这些库今天最好的用途是什么吗?它们仅仅支持GUI,还是也支持数据库、XML、网络、线程等等?

我正在阅读相关资料,并考虑开始学习/使用其中一个。

哪个是最常见的呢?它们之间有什么区别?为什么会选择其中之一而不是其他的?


22
最初,Qt 的许可模式存在很多争议,要么是完全使用 GPL 许可,要么就得商业授权。而 GTK+ 则是使用 LGPL 许可(因此与您的闭源产品结合使用更加容易)。但现在 Qt 也可作为 LGPL 使用,所以选择哪种框架不再是一个真正的理由了。 - Roalt
3
你还可以查看这个相关问题:https://dev59.com/cHI-5IYBdhLWcg3wio9k - Caleb Huitt - cjhuitt
6
又有一个好问题在stackoverflow上被关闭了。我想补充一点,如果你需要一个好的集成HTML小部件,现在必须使用GTK(因为QT 5.2移动到了一个显著/无法使用的功能减少),或者使用QT并嵌入Chrome CEF,这会增加很多东西、复杂性和20MB到你的应用程序中。 - Lothar
9个回答

111

由于您似乎主要针对Linux,因此选择大多取决于您想使用的编程语言。

如果您使用C进行编码,则显然选择GTK+。

如果您使用C ++ 进行编码,请选择Qt,否则您需要使用 Gtkmm(一个基于GTK +的C ++封装)

如果您使用Python编写代码,则GTK +和Qt都具有该语言的绑定:请参见PyGtkPyQtPySide(Nokia自己推出的那个)。

如果您使用Java编写代码,则Qt不再是可行的选择,因为Nokia停止了Qt Jambi(Qt的Java绑定)。

此外,Qt在其场景图API QGraphicsScene,构建在JavaScript Core之上的脚本引擎,其状态机和动画框架以及声明式UI方面更加精湛。

GTK +并没有提供那么多,尽管您可以在其旁边使用 Clutter

如果您特别关注DB、XML(GTK+支持XML子集的解析器)和线程处理(GTK+有GLib),那么Qt将在QtSqlQtXmlQtConcurrent中提供所有这些功能。

总之,我会说Qt是一个可靠的选择。但GTK+也非常强大。

我不确定您是否能获取到您问题的明确答案,这就解释了为什么有些人继续喜欢Gnome而不是KDE,反之亦然。选择最适合您的工具。

附言:如果您计划同时面向Symbian,则选择Qt。

编辑:使用QtWebView在Qt应用程序中引入Chromium以显示网页内容也是很棒的一点。其他人则可能使用Awesomium或Berkelium等方式嵌入网页内容到他们的应用程序中。


2
关于你的修改,对于GTK+,有WebKitGtk+可用。除非其中一个比另一个更成熟,否则我认为QtWebKit的存在并不意味着它比GTK+更具优势。 - Matthew
如果你使用 Ruby 编程,请寻找 QtRuby - José Andias
关于Java的Qt Jambi,尽管诺基亚多年前停止了官方支持,但该项目目前由一个开源社区维护。 - José Andias
9
gtkmm非常棒,它拥有GTK+所有的功能,但使用的是符合现代定义的真正的C++语言,产生了最干净、最易读的GUI代码,实际上这是我见过最能让人忍受的代码,因为当我刚开始尝试学习GUI编程时,gtkmm的整洁性恢复了我的生命意志。幸运的是,坚持不懈终于有了回报,我发现它非常强大,并鼓励我更深入地学习C++14而不是C++03。此外,它由同一位主要维护者维护了十多年(据我所知)。我只是一个粉丝,没有任何关联等。 - underscore_d
3
哦...Symbian的时代... - olfek
显示剩余2条评论

47

我之前使用过GTK+、QT和wxWidgets。以下是简要总结:

对于我的第一个跨平台UI项目,我决定选择wxWidgets,主要是因为当时它的许可证不像QT那样限制性(QT是GPL并且只适用于Linux),而且它有特定于平台的UI(不像GTK)。项目进展得很顺利,但在其他平台上编译和正常运行时出现了一些小问题,有时候某些事件的触发方式会有所不同等等。此外,wxWidgets中的GDI速度相当慢。

接下来,我在另一个Python项目中使用了GTK。为此,我使用了Python绑定,并且一切基本上都很顺利。我并不太喜欢UI在Windows和Mac上看起来不原生的事实,以及每次启动GTK+应用程序时都会输出大量CRITICAL警告,这些警告似乎可以忽略。:S

最后,我做了一个非常简单的QT项目,现在Nokia已经收购了它,结果非常出色。这三个库中最好的是QT。首先,如果你不是喜欢VI或Emacs的老派人士,QtCreator是非常棒的。我真的很喜欢VI,用了很多年,但是我更喜欢用QtCreator进行C++ QT项目。关于这个库,我也非常喜欢它的文档和提供的API。QT有一个概念叫做slots和signals,引入了新的C++关键字和预处理器。基本上,在阅读教程后你会很容易地理解并且开始喜欢它。我现在正在做iPhone开发,感觉有点像Cocoa/Interface Builder的UI范例。

总结:毫不犹豫地选择QT。许可证相当不错,并且SDK和文档非常好。


19
我认为GTK+应用程序在不同平台上看起来相同是个好事,这意味着我不必花费额外的时间去想如何让我的用户界面在每个本地工具包上都排列得完美无缺。此外,“当你启动GTK+应用程序时,它总是会输出大量CRITICAL警告信息,看起来可以忽略。” - 不,它并不会,除非你操作有误,这是好的。我从未见过一个关键性的警告信息不是由于我自己的错误而产生,并且使用正确的代码非常容易修复它们,所以我根本没有任何调试消息,甚至没有警告。 - underscore_d

28

我从未使用过GTK,但是从个人使用Qt的经验来看:

Qt不仅是一个简单的GUI,而是一个完整的应用程序框架。我认为它就像C++的Java库。Qt提供了您所提到的所有功能--数据库、XML、网络和线程等等。它还提供了容器、迭代器以及一些boost库的对应项。

当我开始使用Qt时,最让我印象深刻的是极其广泛的文档。您可以获得一个名为Qt Assistant的程序,它在您的桌面上提供了完全索引和可搜索的API文档,以及众多的代码示例和教程。我发现这在每次搜索API信息时都能起到巨大的作用。需要记住方法签名时,访问非常快速。

我不确定哪个更常见;这可能很难准确衡量。它们两者肯定都很受欢迎。由于Gnome是Ubuntu的默认桌面环境,而Gnome建立在GTK之上,因此显然已经广泛使用。当然,KDE也非常受欢迎。Nokia在移动领域大力推广Qt--他们的Maemo操作系统(例如新的N900)很快将切换到Qt作为默认工具包(目前使用的是GTK)。我相信Qt也很快将成为Symbian操作系统的默认工具包。

我没有使用过Qt Creator,但我听说它非常好。它是一个带有与Qt明显整合的C++ IDE。它还具有假vim仿真,如果您喜欢这种东西,那肯定更好!

Qt使用qmake进行构建配置。我发现这比编写自己的makefiles要好得多。我不知道GTK用于构建的工具是什么。

一开始我发现Qt有一些让人畏缩的事情,例如它大量使用预处理器宏。信号/插槽系统为应用程序中的事件/消息传递提供了一个不错的机制,但如果您想要将其轻松移植到另一个工具包,则可能感觉有点像不可移植的魔法。此外,元对象编译器(moc),虽然我不完全确定它的作用,但似乎在幕后执行了太多的魔法。

总之,我推荐Qt,特别是如果你正在学习。它有非常棒的文档和漂亮的IDE,以及繁忙的论坛。你将能够非常快速地使用它构建C++应用程序,尤其是随着QML在4.7中的推出。


9

可能要根据你想做什么来进行选择。我建议使用Qt,因为它不仅有GUI,还有很好的Python绑定(Gtk也有),而且GUI库本身更加愉悦,主观地讲,比Gtk更好。

另一方面,Gtk在Linux世界中更为常见,因此你可以在网络上获得更多帮助。Gtk的广泛应用可能更多地与Gnome和Ubuntu有关,而不是技术优点,但如果你希望软件能够与这两个平台良好地融合,那么使用Gtk会更加容易实现。


8

Qt拥有稳定的数据库、网络、线程支持等功能...它不仅仅是跨平台GUI(而且大多数情况下都做得很好)。

我建议使用Qt而不是GTK+。


4
Qt。它不仅是面向对象的,而且是“好”的面向对象的。 它基于C++的“子集”,不依赖于C++的晦涩难懂(但如果你喜欢受罚,可以继续使用)。
现在由于诺基亚收购了Qt,它拥有强大的发展动力(实际上,诺基亚已经收购Qt约2/3年了)。它将被应用于所有诺基亚和英特尔的移动设备(智能手机、上网本、平板电脑)。
它是KDE的支撑架构,因此非常成熟,但设计非常灵活,使其能够支持当今所有最新的“酷炫功能”,这些功能超出了一个GUI框架的范畴。
尽管去追求它吧。

6
子集?考虑到qmake和moc,更像是超集。 - rr-

3

除了其他答案提到的QT优点,还有以下内容。QT有非常好的文档,自己的IDE和GUI创建器,并通过一些新概念(如槽/信号,基本上是事件)增强了C++。

我不是GTK开发人员,因此无法将它们与GTK世界进行比较 :(


12
对于Gtk,还存在一个GUI创建器Glade(http://glade.gnome.org/)。 - davidbe

1

看起来诺基亚将会在所有地方使用Qt,比如Maemo系统。


1
如果您希望您的应用程序在iOS、Android、Blackberry、其他移动平台、Windows、Mac OSX和Linux上运行,请使用Qt。

qt-project.org


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