Gtk +和Qt有什么区别?

时间:2009-11-26 01:25:38

标签: user-interface qt gtk

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

3 个答案:

答案 0 :(得分:22)

我不能直接与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年前,所以其中一些项目现在可能已经改变了。

答案 1 :(得分:15)

要了解差异,最好了解历史。

QT是作为用户界面开发的,当KDE刚开始开发时,它在开始时就有一些许可问题。 KDE之所以选择QT是因为当时没有多少选择(Motif,Tcl / Tk等等)

GIMP开始开发,当时Window Toolkits不能满足开发人员的需求,因此他们开始编写Gimp工具包(GTK)。一段时间后,决定重新编写GTK并使其面向对象(GTK +)。

此时,由于QT潜在的许可问题,Gnome已经启动并决定使用GTK +库。

现在,如果您查看维基百科上的QT DesignGTK Design条目,您就可以开始看到系统之间的一些差异。

请注意,QT被称为:

  

跨平台应用程序开发框架

而GTK +被称为:

  

用于创建图形用户界面的跨平台小部件工具包。

如果要相信这些条目,那么我认为这就是两者之间的主要差异,但我想说它在今天的世界中是一条相当精细的路线。

答案 2 :(得分:4)

首先,您可以使用C中的Gtk +。Qt仅限C ++。

此外,Gtk +应用程序倾向于使用关闭按钮持续更改对话框。 Qt往往是Ok / Apply / Cancel。不过,我不知道在工具包级别强制实施了多少。

至于编程,我不知道Gtk使用什么回调机制,但是Qt的信号槽机制绝对不可能。