X 窗口编程/Qt
Qt 是一个跨平台应用程序开发框架,广泛用于开发图形用户界面程序,并且自 Qt 4 发布以来,也用于开发非 GUI 程序,例如控制台工具和服务器。 Qt 最著名的应用是 KDE、Qtopia 和 OPIE。 它由挪威公司 Trolltech 生产,前身为 Quasar Technologies,后来被诺基亚收购。 Trolltech 内部人士将 Qt 发音为“cute”。
Qt 使用标准 C++,但通过提供额外的预处理器来扩展语言,该预处理器将 Qt 的扩展转换为纯 C++。 程序员可以使用其他语言使用 Qt; 绑定存在于 Python (PyQt)、Ruby、PHP、C、Perl、Pascal 和 Java (Jambi)。 它在所有主要平台上运行,并具有广泛的国际化支持。 非 GUI 功能包括 SQL 数据库访问、XML 解析、线程管理以及统一的跨平台文件处理 API。
Qt 由 Trolltech 在以下平台上发布
- Qt/X11 — 用于 X Window System 的 Qt
- Qt/Mac — 用于 Apple MacOS X 的 Qt
- Qt/Windows — 用于 Microsoft Windows 的 Qt
- Qt/Embedded — 用于嵌入式平台 (PDA、智能手机、...) 的 Qt
- Qt/Jambi — 用于 Java 平台开发的 Qt。
在这些平台上,有四种版本的 Qt 可用,分别是
- Qt Console — 用于非 GUI开发的版本。
- Qt Desktop Light — 入门级 GUI 版本,剥离了网络和数据库支持。
- Qt Desktop — 完整版本。
- Qt Open Source Edition — 面向开源开发者的完整版本。
前三个版本是在商业许可下发布的,允许闭源开发; 而 Open Source 版本是在 GPL 许可下提供的,以及 LGPL(从版本 4.5 开始),并且另外是在Q Public License (QPL) 下提供,用于 Qt/X11 版本。
在 X11 平台的情况下,QPL 允许最终应用程序在各种开源许可下获得许可,例如 LGPL 或 Artistic 许可。 对于 Windows 和 Mac OS X 平台,GPL 是唯一可用的开源许可,因此用它开发的应用程序也必须是 GPL。
所有版本都支持各种编译器,包括 GCC C++ 编译器。 但是,对 Visual Studio 套件的官方支持仅限于商业 Qt/Windows 版本。Q../Free 项目发布了几个补丁,这些补丁为开源版本的 Qt/Windows 添加了对 Microsoft Visual Studio 和 Borland C++ Builder 的支持。
Trolltech 于 2005 年 6 月 28 日发布了 Qt 4,并在框架中引入了五项新技术
- Tulip 一组模板容器类。
- Interview 用于项目视图的模型/视图体系结构。
- Arthur 一个 2D 绘图框架。
- Scribe 一个 Unicode 文本渲染器,具有用于执行低级文本布局的公共 API。
- MainWindow 一个现代的基于操作的主窗口、工具栏、菜单和对接体系结构。
Qt 4 在所有支持的平台(包括 Windows)上以 GPL 和专有许可进行双重许可(而 Qt/Windows 3.3 仅在专有许可下发布)。
Qt 4.1 于 2005 年 12 月 19 日发布,引入了集成的 SVG Tiny 支持、Qt 打印系统的 PDF 后端以及其他一些功能。
Qt 4.2 于 2006 年 10 月 4 日发布,引入了用于小部件样式的本地 CSS 支持,以及 QGraphicsView 框架,用于有效地渲染屏幕上成千上万的 2D 对象,以替换 Qt 3.x 的 QCanvas 类。
Haavard Nord 和 Eirik Chambe-Eng(Qt 的最初开发者,以及 Trolltech 的首席执行官和总裁)于 1991 年开始开发“Qt”,比该公司成立为 Quasar Technologies 早三年,然后更名为 Troll Tech,再后来更名为 Trolltech。
该工具包被称为 Qt,因为字母 Q 在 Haavard 的 Emacs 字体中看起来很漂亮,而 T 的灵感来自 Xt,即 X 工具包。
当 KDE 成为 GNU/Linux 的领先桌面环境之一时,围绕 1998 年爆发了争议。 由于 KDE 基于 Qt,开源和自由软件运动中的许多人担心,他们主要操作系统的一个重要部分将成为专有软件。
这引发了两项努力:Harmony 工具包,试图在自由软件许可下复制 Qt 工具包,以及 GNOME 桌面,旨在完全取代 KDE。 GNOME 桌面使用 GTK+ 工具包,该工具包是为 GIMP 编写的,主要使用 C 编程语言。
在 1.45 版本之前,Qt 的源代码是在 FreeQt 许可下发布的——开源倡议和自由软件基金会认为它不符合开源原则,因为虽然源代码可用,但它不允许重新分发修改后的版本。 随着工具包 2.0 版本的发布,许可证更改为 QPL,一个自由软件许可证,但自由软件基金会认为它与 GPL 不兼容。 KDE 和 Trolltech 之间寻求妥协,其中 Qt 无法获得比 QPL 更严格的许可,即使 Trolltech 被收购或破产。 这导致了 KDE Free Qt 基金会的创建,该基金会保证,如果在 12 个月内没有发布 Qt 的开源版本,Qt 将在 BSD 许可下发布。
Qt 的最初版本只有两种风格:用于 Unix 的 Qt/X11 和用于 Windows 平台的 Qt/Windows。 Windows 平台仅在商业许可下提供。 在 2001 年底,Trolltech 发布了 Qt 3.0,它增加了对 Mac OS X 平台的支持。 Mac OS X 支持仅在商业许可下提供,直到 2003 年 6 月,Trolltech 发布了版本 3.2,其中 Mac OS X 支持在 GPL 许可下提供。
在 2002 年,KDE on Cygwin 项目的成员开始将获得 GPL 许可的 Qt/X11 代码库移植到 Windows。 这是对 Trolltech 拒绝在 GPL 下许可 Qt/Windows 的回应,理由是 Windows 不是开源平台。 该项目取得了相当大的成功,尽管它从未达到生产质量。 Qt/Windows 4 于 2005 年 6 月由 Trolltech 在 GPL 下发布。Qt4 现在在开源版本中支持与商业版本相同的平台集。
Qt 首次发布时的创新依赖于几个关键概念。
Qt 使用自己的绘制引擎和控件。 这使得移植到其他平台的工作变得更容易,因为 Qt 中很少有类真正依赖于目标平台。 Qt 过去会模拟其目标平台的本地外观,这有时会导致模拟不完美的地方出现细微差异。 但是,这不再适用,因为最新版本的 Qt 使用不同平台的本地样式 API 来绘制 Qt 控件。
称为moc,这是一个工具,在编译 Qt 程序之前必须在程序源代码上运行该工具。 该工具将生成有关程序中使用类的“元信息”。 Qt 使用此元信息来提供 C++ 中不可用的编程功能:内省以及信号和槽|信号/槽系统。
C++ 社区的一部分批评了使用额外的工具,他们指出 Qt 编程是对 C++ 的嘲弄。 尤其是在宏基础上的实现选择因缺乏类型安全性而受到批评。 有些人将宏与新的 C++ 关键字混淆,并批评了命名空间的污染。 Trolltech 认为,这是一个必要的权衡,以提供内省以及动态生成的槽或信号。 此外,当 Qt 1.x 发布时,无法依赖编译器模板实现之间的一致性。
使用moc允许非常灵活的信号/槽消息系统,因此多个信号可以连接到多个槽,到其他信号,或以“回调安全”的方式连接到不同线程上的槽。
- Mandel 是由 Wolf Jung 开发的一个交互式、跨平台和多语言程序,用于绘制曼德勃罗集和朱利亚集,并用于说明和研究它们的数学特性。它的图形用户界面基于 Qt。它可以在 Linux、Unix、Windows 和 Mac 上使用。源代码在 GNU 通用公共许可证下发布。