【发布时间】:2010-12-20 12:58:05
【问题描述】:
很多人似乎对哪个更好有意见。我并不是真的要征求这些意见,我想知道的是细节:是什么使一个图形工具包与另一个不同,Qt 和 Gtk+ 有哪些差异?
【问题讨论】:
标签: user-interface qt gtk
很多人似乎对哪个更好有意见。我并不是真的要征求这些意见,我想知道的是细节:是什么使一个图形工具包与另一个不同,Qt 和 Gtk+ 有哪些差异?
【问题讨论】:
标签: user-interface qt gtk
首先,您可以从 C 中使用 Gtk+。Qt 仅支持 C++。
此外,Gtk+ 应用程序往往具有持续变化的对话框,带有一个关闭按钮。 Qt 倾向于遵循 Ok/Apply/Cancel 的路线。不过,我不知道在工具包级别执行了多少。
至于编程,我不知道 Gtk 使用什么回调机制,但 Qt 的信号槽机制绝对是摇滚。
【讨论】:
要了解差异,最好了解历史。
QT 是作为 UI 开发的,在刚开始开发 KDE 时存在一些许可问题。 KDE 选择 QT 是因为当时没有太多选择(Motif、Tcl/Tk 等等)
GIMP 开始开发,当时 Window Toolkits 还不能满足开发人员的需求,因此他们开始编写 Gimp Tool Kit (GTK)。一段时间后决定重写 GTK 并使其面向对象 (GTK+)。
也是在这个时候,由于 QT 的潜在许可问题,Gnome 启动并决定使用 GTK+ 库。
现在,如果您查看 Wikipedia 上的 QT Design 和 GTK Design 条目,您可以开始看到系统之间的一些差异。
请注意,QT 被称为:
跨平台应用开发框架
而 GTK+ 被称为:
用于创建图形用户界面的跨平台小部件工具包。
如果这些条目是可信的,那么我认为这就是我们可以在两者之间的主要区别,但我会说它在当今世界中是一条相当不错的线。
【讨论】:
我不能直接与 Gtk+ 交谈,但在我以前的工作中我使用 Gtkmm,而在我目前的工作中我使用 Qt。两者都是 C++,因此在这方面它们是一致的,但 Gtkmm 是/曾经只是 Gtk+ 代码的包装器,它是直接 C 语言。
在我换工作时,我记得 Ui 代码的主要区别之一是这两个工具包如何处理布局。有些部分我认为 Gtk 做得更好,有些部分我认为 Qt 做得更好。最终,两者都可以让您将小部件放在您想要的地方。
使用 Gtkmm 调试有点痛苦,因为这些类通常除了持有指向结构的指针和调用 Gtk+ 函数之外什么都不做。这种额外的间接性可能很烦人。
Qt 有更多可用于各种设置的辅助代码,至少与我使用的 Gtkmm 版本相比。当您需要为程序添加新维度时,使线程、进程间通信和网络变得更容易的东西都会受到赞赏。他们也有自己的容器,如果你想使用它们,我认为它们的界面比 STL 容器更清晰——但它们最终会做同样的事情,所以这是一个轻微的优势。
Gtkmm 和 Qt 之间的信号/槽机制是不同的。 Qt 依赖于编译过程中的一个额外步骤来生成元信息,它用于其信号/插槽。使用信号或槽的对象必须从 QObject 继承,并且 QObject 继承必须是第一个,没有菱形结构。例如,这使得定义一个发出信号的抽象接口变得困难。从好的方面来说,他们天生就知道线程问题,并会在必要时将信号/插槽连接转换为基于事件的连接。 Gtkmm 使用 SigC 信号,它们是简单的 C++ 类,对我来说似乎在更广泛的情况下很有用。此外,我记得只有建立连接的对象需要从魔术基类继承。另外,由于槽是对象,因此您也可以将它们用作非常好的自适应仿函数对象。
我确信还有其他差异,但这是我现在记得的。请记住,我上一次使用 Gtkmm 是在大约 3 年前,所以其中一些项目现在可能已经改变了。
【讨论】: