我不能直接对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年前,所以有些项目可能已经改变了.