很多人似乎对哪个更好有意见。我并不是真的要征求这些意见,我想知道的是细节:是什么使一个图形工具包与另一个不同,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/