user-interface - Gtk+ 和 Qt 有什么区别?

标签 user-interface qt gtk

很多人似乎对哪个更好有意见。我并不是真的要征求这些意见,我想知道的是细节:是什么使一个图形工具包与另一个不同,Qt 和 Gtk+ 有哪些差异?

最佳答案

我不能直接与 Gtk+ 交谈,但在我之前的工作中我使用 Gtkmm,而在我目前的工作中我使用 Qt。两者都是 C++,因此在这方面它们是一致的,但 Gtkmm 是/只是 Gtk+ 代码的包装器,它是直接 C 语言。

在我换工作时,我记得 Ui 代码的主要区别之一是这两个工具包如何处理布局。有些部分我认为 Gtk 做得更好,有些部分我认为 Qt 做得更好。两者都可以让您最终将小部件放在您想要的地方。

用 Gtkmm 调试有点痛苦,因为这些类通常除了持有指向结构的指针和调用 Gtk+ 函数之外什么都不做。这种额外的间接级别可能很烦人。

Qt 有更多可用于各种设置的辅助代码,至少与我使用的 Gtkmm 版本相比。当您需要为程序添加新维度时,使线程、进程间通信和网络变得更容易的东西都会受到赞赏。他们也有自己的容器,如果你想使用它们,我认为它们的界面比 STL 容器更清晰——但它们最终会做同样的事情,所以这是一个轻微的优势。

Gtkmm 和 Qt 之间的信号/槽机制是不同的。 Qt 依赖于编译过程中的一个额外步骤来生成元信息,它用于其信号/插槽。使用信号或槽的对象必须从 QObject 继承,并且 QObject 继承必须是第一个,没有菱形结构。例如,这使得定义发出信号的抽象接口(interface)变得困难。从好的方面来说,他们天生就知道线程问题,并会在必要时将信号/插槽连接转换为基于事件的连接。 Gtkmm 使用 SigC 信号,它们是简单的 C++ 类,对我来说似乎在更广泛的情况下很有用。此外,我记得只有建立连接的对象需要从魔术基类继承。另外,由于插槽是对象,您也可以将它们用作非常好的自适应仿函数对象。

我敢肯定还有其他差异,但这就是我现在记得的。请记住,我上一次使用 Gtkmm 是在大约 3 年前,所以其中一些项目现在可能已经改变。

关于user-interface - Gtk+ 和 Qt 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1801074/

相关文章:

c++ - 如何获取 CComboBoxEx 中当前选定的文本?

c++ - C2248 : cannot access private member declared in Singleton class如何解决

c - GtkEntry 和 "editing_done"信号

javascript - 在 Fabric.js 中用鼠标旋转东西的正确方法

c++ - 使用工厂模式来实例化所有小部件是否明智?

r - 如何在 Shiny 中单击添加/保留任意数量的绘图层

c++ - 使用 decltype(this) 获取函数引用

c++ - 我需要什么 dll 来分发我的 Qt 应用程序?

c++ - "constant"GtkLabel 的 gtk+ 信号

gtk+: How to Draw Custom Window Borders Like Chrome or Steam