【问题标题】:Gtk+ vs Qt language bindingsGtk+ vs Qt 语言绑定
【发布时间】:2010-05-11 12:54:01
【问题描述】:

简而言之:适合那些熟悉 Qt 和 Gtk+ 中的语言绑定的人。例如。蟒蛇和红宝石。有没有质量或能力上的差异?

更多背景知识:我非常了解 C++ 和 Qt。使用 Gtk+ 的最少经验。我知道由于缺乏定义良好的 ABI(应用程序二进制接口),C++ 不适合语言绑定。我还读到 Gtk+ 被设计为绑定到其他语言。所以我想知道这在实践中是如何表现出来的。在某些方面,Gtk+ 绑定是否比 Qt 绑定更好地维护或工作得更好?

我目前对 Go 语言很感兴趣,他们已经开始开发 Gtk+ 绑定。然而,C++ 绑定还很遥远。这让我怀疑学习 Gtk+ 是否值得。

【问题讨论】:

  • 瓦拉呢[live.gnome.org/Vala]?它是一种很棒的新语言(比 C++ 好得多)。它类似于 C#,但生成本地代码,专门用于 GTK+ 开发。
  • 我已经考虑过了,但我的主要兴趣是围棋。有一种编码 GUI 的方法是第二个问题。 Vala 看起来很像 C#/Java。我更喜欢构建在 GObject 之上的类似于 Go 的更新鲜的方法。

标签: qt gtk binding


【解决方案1】:

我在 C++ 中使用过 GTK 和 Qt,在 Python 中也使用过 PyGTK 和 PyQt。

Qt 胜过 GTK - 它是一个更加灵活、现代和简洁的 API。 GTK 也缺少一些对我很重要的功能。从框架的角度来看,我推荐 Qt。

至于语言绑定(我只能谈论 Python,因为我从未使用过 Ruby 等价物),我认为 PyGTK(使用 Glade 和像 Padraig Bradys libglade 这样的包装器)使 GUI 编程变得异常简单和有趣。但是,如果您可以 GPL 您的软件(或支付许可费),那么 PyQt 也是一个不错的选择,虽然不如 PyGTK + Glade 友好(在 GTK 中,您可以将 Glade 中的 UI 定义为单独的 XML文件,因此您可以在不接触代码的情况下调整 UI;在 Qt 中,如果您想使用 QtDesigner,您必须使用 uic 生成代码,如果我没记错的话)API 本身非常好用,并且反映了 Qt 框架的简洁设计非常接近。

总的来说,我可能会推荐使用 PyQt 而不是 PyGTK,但我可能有偏见,因为我现在更喜欢 Qt 而不是 GTK,尽管您可以尝试两种方法,看看您更喜欢哪一种 - 它们都几乎可以正常工作.

如果您正在寻找一本关于 PyQt 的好书,我会推荐 Rapid GUI Programming qith Python and Qt

总结一下:恕我直言,Qt 在质量和功能上都击败了 GTK。尽管 PyGTK 可以加载 Glade xml 文件,但 PyGTK 和 PyQt 都具有出色的质量和功能反映了底层框架。

【讨论】:

  • 感谢您的输入 :-) 实际上 Qt 允许您将 Qt 设计器文件保存为 XML 并直接加载它们一段时间。我正在阅读 Gtk+ Model-View-Controller 的东西。 GtkTreeView 等。到目前为止,我认为该设计看起来比 Qt 的解决方案更好。但我实际上并没有使用它,所以我可能错了。有cmet吗? Qt 中是否有比 Gtk 更容易使用的特定领域?例如。布局、信号槽系统、创建新的小部件或仅仅是因为 C++ 比 C 更易于使用?
  • 有意思,前阵子找的时候,没找到。。我喜欢Qts的signal-slot机制,非常灵活好用;我真的很喜欢 Qt 的 graphicsview 系统,而不是 GTK 等价物,而且我发现 Qt 小部件集更完整且功能更丰富(例如,没有笨重的扩展,GTK 不支持可停靠窗口)。我现在大部分工作都是在 C++ 中完成的,我发现它既方便又容易(不像 Python 那样简单,但足够接近,我很乐意用 C++ 编写 Qt 代码,尤其是绘图代码,而不用担心代码复杂性)跨度>
  • 好吧,有趣。我没有想到 Qt 拥有的所有其他 API,比如 graphicsview。这确实很好。我查看了 GtkComboBox 和 GtkTreeView,它们看起来比 QComboBox 和 QTreeView 设计得更好。更容易将小部件放入列并定义模型。笨拙的扩展是什么意思?其他基于 GObject 的 API,如 Clutter 等?
  • 我现在找不到示例,也许自从我查看以来它有所改进,但是我在安装高级扩展小部件时遇到了一些问题,尤其是在 Windows 上,甚至在 linux 上。不过,组合框在 GTK 中确实更容易使用。我从来不需要过多地使用它们,所以我不知道 Qts 更复杂的是否更强大。我确实很喜欢 Qts 的其他库:尤其是 QtConcurrent、QtWebkit、Graphics View 和 QtNetwork。我猜有些人不希望有一个框架包太多,但我喜欢 Qts 的情况。
【解决方案2】:

我认为 GTK 绑定比 Qt 绑定更早(因此更成熟),但它们都可用,并且您之前对 Qt 的了解应该是您选择的主要因素。

我使用 Qt 和 GTK 及其 python 绑定开发了小型 GUI,并找到了两个等价物。遗憾的是,PyQt 与 Qt 容器(QVector,...)的绑定没有被翻译成常规的 python 数据结构,因此给代码增加了一些复杂性。我不记得使用 PyGTK 时遇到过同样的问题。

【讨论】:

  • QVariant,如果你使用 PyQt 和 python3,则不需要其他噪声
【解决方案3】:

我曾使用过 PyQt 和 PyGTK,我想说它们都定期维护并与它们的父框架同步。然而,这完全是主观的,我发现使用 PyGTK 比使用 PyQt 更有价值,即使我以前没有使用 GTK 编写过任何代码。如果你对 Qt 很熟悉,那就去 Qt 吧。

【讨论】:

    【解决方案4】:

    我一直在尝试围绕 Qt 的一些组合:RubyQt、JRuby + Jambi、PyQt。第一个很快就会出现各种分段错误。我的 Qt 技能可能是问题所在,但所有的段错误都不太可读。 RubyQt 论坛快死了,所以不要指望在那里找到太多信息。

    所以我搬到了 JRuby + Jambi。这一直有效,我在这里和那里找到了一些缺失的功能。另外,我必须为 JRuby 实现正确的信号/连接。所以,或多或少是一个黑客。没有说服力。

    最后我转向了 Python(我不太喜欢)。但是,哇,有什么不同。绑定是最新的,我仍然想知道一个 segmetatio 错误,错误消息大部分时间都是非常解释性的。所以就我而言,Python+Qt 显然是赢家。

    请注意,我尝试这些组合是为了找到合适的语言/qt 绑定,以便我可以根据我的通勤时间(每天大约 2 小时)创建一个准备就绪的产品。所以我对分段错误等小而烦人的问题的容忍度是 0。我还必须在 Windows 和 Linux 上进行开发。所以 Windows 安装是必要的(再一次,Python 是这里的明显赢家)。

    【讨论】:

      【解决方案5】:

      有 C++ gtk+ 绑定。 Google for gtkmm。

      【讨论】:

      • 我知道。我不是在问它们是否存在。但是关于他们的质量
      猜你喜欢
      • 2014-04-20
      • 2014-04-21
      • 2023-03-18
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多