【问题标题】:What should I choose: GTK+ or Qt? [closed]我应该选择什么:GTK+ 还是 Qt? [关闭]
【发布时间】:2010-12-25 14:47:45
【问题描述】:

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

我正在阅读它们,并考​​虑开始学习/使用其中之一。

什么是最常见的?他们之间有什么区别?你为什么会选择一个而不是另一个?

【问题讨论】:

  • 最初,关于 Qt 许可模型是完全 GPL 还是商业许可模型存在很多争议,而 GTK+ 是 LGPL(因此后者更容易与您的闭源产品结合使用)。但是现在 Qt 也可以作为 LGPL IIRC 使用,所以这不再是选择一个或另一个的真正理由。
  • 您也可以看看这个最相关的问题:stackoverflow.com/questions/1801074/…
  • 又一次在stackoverflow上结束了一个好问题。我想补充一点,如果您需要一个良好的集成 HTML 小部件,您现在必须使用 GTK(在 QT 5.2 迁移到一个显着/无法使用的缩减功能集之后)或使用 QT 并嵌入 Chrome CEF,这会增加很多东西、复杂性和20MB 到您的应用。

标签: linux qt gtk


【解决方案1】:

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

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

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

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

我没有使用过 Qt Creator,但我听说过很多关于它的好消息。它是一个明显与 Qt 高度集成的 C++ IDE。它也有假的 vim 仿真,如果你喜欢那种东西总是很好的!

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

一开始我发现 Qt 有点令人反感的是它大量使用了预处理器宏。信号/槽系统为应用程序中的事件/消息传递提供了一个很好的机制,但它确实有点像魔法,如果你愿意的话,它可能不容易移植到另一个工具包。此外,moc(元对象编译器)虽然我不完全确定它的作用,但也感觉有点像幕后发生的魔法。

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

【讨论】:

    【解决方案2】:

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

    如果你用 C 编写代码,那么显然选择 GTK+

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

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

    如果您使用 Java 编写代码,恕我直言,Qt 不再是一个可行的选择,因为 Nokia discontinued Qt Jambi(Qt 的 Java 绑定)。

    此外,Qt 在其场景图 QGraphicsScene API、基于 Javascript Core(支持 WebKit 的引擎)构建的脚本引擎、其状态机和动画框架以及 declarative UI 方面更加一流。

    GTK+ 提供的功能不多,尽管您可以同时使用Clutter

    如果您专门研究 DB、XML(GTK+ 有一个 XML 子集的解析器)和线程(GTK+ 有 GLib)特性,那么 Qt 将在 QtSqlQtXml 和 @ 中提供所有这些特性987654332@.

    总而言之,我会说 Qt 是一个确定的选择。但 GTK+ 也非常有能力。

    我不确定您的问题是否会得到明确的答案,这解释了为什么有些人一直更喜欢 Gnome 而不是 KDE,反之亦然。 选择最适合您的。

    PS:我打算也以 Symbian 为目标,然后选择 Qt。

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

    【讨论】:

    • 别忘了 QtScript 是由 JavaScriptCore 提供支持的,由于 SquirrelFish Extreme,它是目前最快的 JavaScript 引擎。
    • 关于您的编辑,有用于 GTK+ 的 WebKitGtk+。除非一个比另一个成熟得多,否则我不认为 QtWebKit 的存在有资格作为 GTK+ 的优势。
    • 如果您使用 Ruby 编写代码,请查找 QtRuby
    • gtkmm 很棒,GTK+ 的所有功能,但使用现代定义的 actual C++,生成我见过的最干净、最易读的 GUI 代码......实际上,只是最可以忍受的,因为当我第一次开始尝试学习 GUI 编程时,正是 gtkmm 的整洁让我恢复了生活的意愿。值得庆幸的是,毅力得到了回报,我发现它非常强大,它鼓励我更多地学习 C++14 而不是 C++03。此外,它由同一个主要维护者维护了十多年 AFAICT。我只是一个粉丝,没有隶属关系等。
    • 哦...塞班时代...
    【解决方案3】:

    我以前用过 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 和文档非常好。

    【讨论】:

    • 我认为 GTK+ 应用程序在不同平台上的外观相同是一件好事,因为这意味着我不必花费额外的时间来弄清楚如何使我的 UI 与每个原生工具包完全匹配。另外 - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- 不,它不会,除非你做错了什么,这是好的。我从来没有见过不是源于我自己的 oops 的严重警告,而且使用正确的代码也不容易修复。我得到 no 调试消息,甚至没有警告
    【解决方案4】:

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

    qt-project.org

    【讨论】:

      【解决方案5】:

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

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

      它是 KDE 的支柱,所以它非常成熟,但它的设计方式非常灵活,这使得它可以支持今天所有最新的“酷东西”,更多的只是 GUI 框架应该有。

      去吧。

      【讨论】:

      • 子集?更像是超集,考虑到 qmake 和 moc。
      【解决方案6】:

      看起来诺基亚即将在任何地方使用 Qt,比如在 Maemo 上

      【讨论】:

        【解决方案7】:

        只是将 QT 优势添加到其他答案中。QT 有很好的文档,它自己的 IDE & GUI creator 并通过插槽/信号(基本上是事件)等一些新概念来增强 C++。

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

        【讨论】:

        【解决方案8】:

        这可能取决于你想做什么。我会推荐 Qt,因为它不仅仅是 GUI,它有很好的 Python 绑定(Gtk 也是如此),而且 GUI 库本身(主观上)比 Gtk 更令人愉快。

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

        【讨论】:

          【解决方案9】:

          Qt 肯定有可靠的数据库、网络、线程支持等...它比跨平台 GUI 做得更多(而且大部分都做得很好)。

          我会推荐它而不是 GTK+。

          【讨论】:

            猜你喜欢
            • 2015-09-15
            • 1970-01-01
            • 1970-01-01
            • 2016-03-19
            • 2010-12-08
            • 1970-01-01
            • 2010-10-17
            • 1970-01-01
            相关资源
            最近更新 更多