我应该选择什么:GTK +或Qt?[关闭]


88

有人可以建议当今这些库的最佳用途是什么?仅仅是GUI,还是它们也具有数据库,XML,网络,线程等支持?

我正在阅读有关它们的内容,并考虑开始学习/使用其中之一。

最常见的是什么?它们之间有什么区别?为什么要选择一个?


20
最初,关于Qt许可模式(完全GPL还是商业)存在很多争议,而GTK +是LGPL(因此后者更易于与您的封闭源产品结合使用)。但是现在Qt也可以作为LGPL IIRC使用,所以选择一个或另一个不再是真正的理由。
Roalt,2009年

3
你也可以看看这主要是相关的问题:stackoverflow.com/questions/1801074/...
迦勒Huitt - cjhuitt

4
再次,关于stackoverflow的一个好问题结束了。我想补充一点,如果您需要一个良好的集成HTML小部件,则必须立即使用GTK(在将QT 5.2移至功能明显/无法使用的简化功能集之后),或使用QT并嵌入Chrome CEF,这将增加很多东西,复杂性和应用程序20MB。
Lothar'6

Answers:


94

因为您似乎主要针对Linux,所以选择主要取决于您要使用的编程语言。

如果您使用C编写代码,那么显然可以使用GTK +

如果您使用C ++编写代码,请使用Qt,否则您将需要Gtkmm(GTK +上的C ++包装器)

如果您使用Python进行编码,则GTK +和Qt都具有该语言的绑定:请参见PyGtkPyQtPySide(由诺基亚自己发布的代码)。

如果您使用Java进行编码,则由于诺基亚不再使用Qt JambiQt的Java绑定),因此Qt不再是可行的选择。

同样,Qt在其场景图QGraphicsScene API,基于Javascript Core构建的脚本引擎(为WebKit提供动力的引擎),其状态机和动画框架以及声明性UI方面更为一流。

尽管您可以将Clutter与它一起使用,但GTK +并没有提供太多功能。

如果您专门研究DB,XML(GTK +具有用于XML子集的解析器)和线程(GTK +具有GLib)的功能,则Qt将提供QtSqlQtXmlQtConcurrent中的所有功能。

总而言之,我想说Qt是肯定的选择。但是GTK +也非常有能力。

我不确定您的问题会得到一个明确的答案,这可以解释为什么有些人仍然偏爱Gnome而不是KDE,反之亦然。选择最适合您的产品。

PS:我打算同时也针对Symbian,然后选择Qt。

编辑:Qt的另一个好处是QtWebView:它将Chromium带入Qt应用程序以显示Web内容。其他人则使用Awesomium或Berkelium将Web内容嵌入其应用程序。


不要忘记QtScript由JavaScriptCore支持,由于SquirrelFish Extreme,它是目前最快的JavaScript引擎。
CMircea,2010年

1
关于您的编辑,有用于GTK +的WebKitGtk +。除非一个人比另一个人成熟得多,否则我认为QtWebKit的存在不具备超过GTK +的优势。
马修·

如果您使用Ruby编写代码,请寻找QtRuby
何塞·安迪亚斯

5
gtkmmGTK +的所有功能都很棒,但是按照现代定义使用了实际的C ++,可以生成我所看到的最干净,最易读的GUI代码……实际上,只是最可忍受的,因为当我第一次开始尝试学习GUI编程时,正是这样的整洁gtkmm使我恢复了生活意志。值得庆幸的是,毅力得到了回报,我发现它的功能非常强大,它鼓励我更多地使用C ++ 14,而不是C ++ 03。而且,由同一主要维护者对AFAICT进行了十多年的良好维护。我只是一个球迷,没有隶属关系,等等
underscore_d

3
噢,塞班时代……
达卡

41

我以前使用过GTK +,QT和wxWidgets。这是一个简短的摘要:

对于我的第一个跨平台UI项目,我决定选择wxWidgets,主要是因为当时的许可证不像QT那样严格(QT是GPL,仅适用于Linux),并且它具有特定于平台的UI(与GTK不同)。该项目运行良好,但存在很多故障使其可以在其他平台上编译和正常运行-有时某些事件的发出方式有所不同。wxWidgets中的GDI也很慢。

接下来,我将GTK用于python中的其他项目。为此,我使用了python绑定,一切都或多或少地顺利进行了。我不太喜欢UI在Windows和Mac上看起来不是本机的事实,而且当您启动GTK +应用程序时,它总是调试输出CRITICAL警告的负载,这些警告似乎可以忽略。:S

最后,既然诺基亚已经收购了它,并且表现出色,我做了一个非常简单的QT项目。最好的三个。首先,如果您不是喜欢VI或Emacs的老同学,那么QtCreator就是出色的选择。我真的很喜欢VI,并且使用了很多年,但是我更喜欢QtCreator用于C ++ QT项目。关于库,我也非常喜欢提供的文档和API。QT具有插槽和信号的概念,这些概念引入了新的C ++关键字和预处理器。基本上,阅读教程后,您将轻松获得并开始喜欢它。我现在正在从事iPhone开发,它的确有点像Cocoa / Interface Builder的UI范例。

简介:我会亲自参加QT。许可证非常好,SDK和文档也非常好。


13
我认为GTK +应用程序在不同平台上看起来相同是一个好消息,因为这意味着我不必花费额外的时间来弄清楚如何使我的UI与每个本机工具箱完全正确地结合在一起。另外--when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S不,除非您做错了,否则不可以。我从来没有见过严重的警告,它不是源于我自己,也不是通过使用正确的代码来解决的。而且我没有得到调试消息,甚至没有警告
underscore_d

25

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

它不仅仅是一个简单的GUI。这是一个完整的应用程序框架。我曾经将其视为C ++的Java库。它提供了您所提及的所有内容-数据库,XML,网络和线程等等。它还提供诸如容器和迭代器之类的东西,以及许多boost库的对应物。

开始使用Qt时,给我最深刻的印象是极其丰富的文档。您将获得一个名为Qt Assistant的程序,该程序可在您的桌面上提供完全索引和可搜索的API文档,以及许多代码示例和教程。我发现这对每次在网络上查找API信息都有很大的不同。当您需要记住方法签名时,可以快速访问。

我不确定哪个最常见;这可能很难准确测量。他们当然都受欢迎。由于Gnome是Ubuntu的默认桌面,而Gnome位于GTK之上,因此它显然具有广泛的用途。当然,KDE也很受欢迎。诺基亚正在大力推动Qt在移动领域的发展-例如,在新N900上使用的Maemo OS将很快切换为默认工具包(目前​​为GTK)作为Qt。我相信Qt也将很快成为默认工具包。适用于Symbian OS。

我没有使用过Qt Creator,但是我听说过很多关于它的好东西。它是一个C ++ IDE,与Qt明显集成在一起。它还具有伪造的vim仿真,如果您喜欢这种东西,那总是很好!

Qt使用qmake进行构建配置。我发现这比必须编写自己的makefile好得多。我不知道GTK用于建筑。

起初我发现与Qt有点矛盾的几件事是它对预处理器宏的大量使用。信号/插槽系统为事件/消息传递在您的应用程序中提供了一种很好的机制,但是它确实有点像魔术,如果您愿意的话,可能不容易移植到另一个工具箱中。另外,虽然我不太确定它是做什么的,但是moc(元对象编译器)也有点像幕后的魔术。

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


9

这可能取决于您要做什么。我建议使用Qt,因为它不仅是GUI,而且具有不错的Python绑定(Gtk也是如此),而且GUI库本身(主观地说)比Gtk更令人愉快。

另一方面,Gtk在linux世界中更为常见,因此您可能可以在网上获得更多帮助。Gtk普及的原因可能与Gnome和Ubuntu有更多关系,而不是技术优势,但是如果您希望软件与这两者完美融合,则可以更轻松地实现Gtk。


7

Qt肯定具有可靠的数据库,网络,线程支持等...它所做的远不止跨平台GUI(它做得还不错)。

我建议在GTK +上使用它。



3

Qt 它不仅是面向对象的,还是“好的”面向对象的。它基于C ++的“子集”,该子集不依赖于C ++的晦涩感(但是,如果您喜欢受虐狂,则可以坚持使用它们;))。

现在,诺基亚(Nokia)收购了它的势头强劲(实际上,诺基亚在大约2/3年前就这样做了)。它将在所有诺基亚和英特尔移动设备(智能手机,上网本,平板电脑)中使用。

它是KDE的骨干,因此非常成熟,但是它以非常灵活的方式设计,这使得今天可以支持更多的刚好东西” GUI框架应该具有的TODAY 。

去吧。


5
子集?考虑qmake和moc更像是超集。
rr-

1

看起来诺基亚即将在各处使用Qt,例如在Maemo上


1

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

qt-project.org

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.