我想知道如果我需要在 WIN 和 Linux 这两个平台上使用该软件,我应该考虑哪一个,为什么?
10 回答
打包 GTK 及其在 Windows 上的依赖项本身就是一个全职项目。Qt 更容易分发,因为它没有 Windows 不附带的依赖项。
Qt 从一开始就是跨平台的。GTK 并不总是跨平台的。这样的基本决定塑造了整体设计,在我看来应该在编写任何代码之前做出。
我会发表更多评论,但我会陷入猜测,以上两件事我肯定知道。
两者都是很好的工具包,各有优缺点。
一个区别是实现语言。Qt 在 C++ 中,而 GTK+ 在 C 中。但是 GTK+ 具有许多其他语言(perl、python、C++、.NET 等)的绑定,所以这不是一个大问题。
Qt 的一个优点是它提供了更广泛的内置功能(xml、数据库访问、网络编程、openGL 等)。GTK+ 基本上所有这些东西都在它的轨道内(例如 libxml2、librsvg、libsoup、libgda 等),但它们不像 Qt 那样是一个单一的连贯包。
我个人的建议是使用gtkmm,这是 GTK+ 的 C++ 绑定。它提供了一种更舒适的面向对象的编程语言,并且提供了与使用 C 语言的 GTK+ 几乎相同的本机性能。(免责声明:我为 gtkmm 做出了贡献)。
GTK+ 您几乎可以在所有编程语言中使用,包括 C++(使用 gtkmm)、C(gtk+)、C#(使用 Gtk#)、Python(PyGtk)。在 GTK 背后,您拥有 Mono Framework,它是用于跨平台目的的 .NET Framework 的出色实现。如果你想使用 Gtk#,你有一个很棒的 IDE (MonoDevelop) 和一个非常强大的 gui 设计器。您可以查看 www.mono-project.org。但仍然取决于您要构建什么,您只是在寻找 gui 工具包,还是整个框架?信号/插槽背后的逻辑在 Gtk+ 和 Qt 中是相同的,但是如果您使用 Gtk#,它们会在委托/事件范式中进行转换。
我的 0.02 美元:
在过去的 4 年里,我断断续续地使用 Qt,它是我尝试过的任何工具(Win32、MFC、Borland、Java、GTK)中最喜欢的工具包。我用了几个星期的 GTK 来试用它,但并不喜欢它。主要是因为我认为在 PC 上的 GUI 应用程序中使用 C 而不是 C++ 很尴尬……我也做嵌入式工作,而且我永远不会在 8051 上使用 C++,但对于大型 GUI 应用程序我更喜欢它. 如果您要尝试 GTK,我建议您查看GTKmm,尽管我自己从未使用过它。
你也可以考虑 wxWidgets。我从来没有使用过它们中的任何一个,但是当我查看跨平台工具包时,它是我决定尝试的。
它们都是很好的工具包。我会根据许可做出决定。如果您在商业产品中使用 Qt,而 GTK 不需要,您需要为许可证付费。
支持 Qt 的另外三点:
- 您的项目不必是GPL;Qt GPL Exception中还有许多其他开源许可证,包括 BSD 和 LGPL。
- Qt 在 Windows 上的默认主题在融入方面比 GTK 的 Wimp 主题要好得多。
- 如果您以后想支持 Mac,那么使用 Qt 会更轻松。
我更喜欢Qt。与今天一样,Qt 在更宽松的 LGPL 许可下是开源和免费的。Qt 更好地移植到 Windows 上,并且看起来比 GTK 更原生。例如,Windows 上的 Gimp 看起来很奇怪,因为它的大多数对话框都不是 Windows 对话框。Qt 可以使用像 Open/Save 这样的原生 Window 对话框,这使它作为一个框架感觉更好。是的,Qt 是一个框架,而不仅仅是一个 GUI Widget。不,我不是在这里宣传 Qt,因为从开发的角度来看,Qt 对于 Windows 用户来说有些陌生,例如,Qt 是基于布局的,而 MFC / .NET 是基于锚的,Qt 的布局管理器有时很奇怪。但是如果我必须在 GTK 和 Qt 之间进行选择,我会选择 Qt。另外,现在,Qt 带有非常好的 IDE,Qt Creator,它是我现在所有类型项目的默认 C/C++ IDE(因为 Qt Creator 可以这样使用)。
Qt 5.0 赢得了这场战争。我不是 C++ 的忠实粉丝(我更喜欢普通的旧 C),但我必须承认 Qt 框架很棒。尝试使用 GTK 编写一个在 OSX、Linux、Windows(以及很快的 iOS 和 Android)上运行的具有原生外观和感觉的 GUI 程序......祝你好运!
我推荐使用 Qt,因为:
- 它是跨平台的,并且涵盖了广泛的操作系统(包括移动)
- 它是开源的,并且在变得更好时速度很快
- 它有一个不错的 GUI 设计器和一个非常强大的 IDE(Qt Creator)
- API设计优秀且易于使用
- 它有一个很好的文档,易于阅读
- 它具有 Qt 翻译系统,使您能够拥有多语言应用程序
- 小部件根据布局调整自身大小的 GUI 布局系统使一切变得更加容易
- QML 使您能够创建具有出色图形和动画的出色 GUI
- 它对网络和连接(socket,SSL,www,IPC,...)有很好的支持
- 它有用于测试代码的 QTestLib
- 如果您不想使用 C++,它有很多语言绑定