## 13.4 Qt 的架构
Qt 的功能是建立在它所支持平台的底层 API 之上的,这使 得 Qt 非常灵活和高效。 Qt 使应用程序可与单平台的应用程序配套。
Qt 是一个跨平台的框架,它使用本地样式的 API 严格遵循每个支持平台中的用户界 面原则。Qt 绘制了 GUI 应用程序所需的几乎所有控件,并且开发人员可以通过重新实现虚 函数的方式来扩展或自定义所有这些控件。 Qt 的窗体能够精确模拟支持平台的观感,开发 人员还可以生成自己的自定义样式,为其应用程序提供具有鲜明特色的外观。
Qt 在它所支持的不同平台中使用底层 API。这与传统的“分层”跨平台工具套件不 同,传统工具套件是指在单个平台工具套件中使用的简单封装(例如,在 Windows 中使用 MFC;在 X11 中使用 Motif)。通常,分层工具套件速度较慢,其原因在于:库函数的每次 调用都会产生许多要经过不同 API 层的附加调用。分层工具套件往往会受到基本工具套件 的功能和行为的限制,导致应用程序中出现隐性错误。
Qt 做到了非常专业地支持各种平台 ,并且可以充分利用各种平台的优点。通过使用单 个源代码树,Qt 应用程序可以编译成每个目标平台的可执行程序。尽管 Qt 是一个跨平台 的框架,但与许多平台特定的工具套件相比, Qt 完全面向对象,更易于学习,更具有高效 性,这使得许多开发人员在开发单个平台时也更倾向于使用 Qt。
1\.X11
Qt/X11 使用 Xlib 直接与 X 服务器通信。Qt 不使用 Xt(X Toolkit,即:X 工具套件)、Motif、Athena 或其他任何工具套件。
Qt 支持各种 Unix :AIX®、FreeBSD®、HP-UX、Irix®、Linux、NetBSD、OpenBSD 和 Solaris。有关 Qt 所支持的编译器和操作系统版本的最新列表信息,请访问 NOKIA 公司网 站。
Qt 应用程序自动适应用户的窗口管理器或桌面环境,并且在 Motif、CDE、GNOME 和 KDE 下具有桌面环境本身的观感。这与大多数 Unix 工具套件相反,这些套件总是把用户限 制在套件自身观感下。Qt 全面支持 Unicode。Qt 应用程序自动支持 Unicode 和非 Unicode 字体。Qt 将多种 X 字体组合在一起,可显示多语言文本。
Qt 的字体处理功能十分强大,可以在所有已安装的字体中搜索当前字体中不存在的字符。
Qt 可以充分利用 X 扩展程序。对于反锯齿字体、alpha 混合字体和矢量图形,Qt 支持 RENDER 扩展程序。Qt 还为 X 输入方法提供了现场编辑功能。Qt 可以 使用传统的多头 显示适配器和 Xinerama 支持多个屏幕。
![](https://box.kancloud.cn/2016-01-22_56a1a1624322e.png)
图 13-1 支持桌面平台中的 Qt 架构概览图
2\.Microsoft Windows
Qt/Windows 使用 Win32® API 和 GDI 用于事件和绘图原语。Qt 不使用 MFC 或任何 其他工具套件。特别地,Qt 不使用缺乏灵活性的“常见”控件上,而是采用功能更强大的 可自定义的控件(如果不是特殊应用, Qt 使用 Windows 本身的文件和打印对话框) 。
使用 Windows 的客户可以在 Windows 98、NT4、ME、2000、XP 和 Vista 中使用 Microsoft Visual C++® 和 Borland C++来创建 Qt 应用程序。
Qt 为 Windows 版本执行运行检查, 并使用提供的最高级功能。 例如, 只有 WindowsNT4、2000、XP 和 Vista 支持旋转文本;Qt 则在所有 Windows 版本中都支持旋转 文本,并在可能的情况下使用了操作系统本身的支持。 Qt 开发人员还可以避免处理不同版 本 Windows API 中的差异。
Qt 支持 Microsoft 的可访问界面。与 Windows 中的常见控件不同,您可以扩展 Qt 控件, 而不会丢失 Qt 基本控件的可访问或者说是固有信息。另外,我们也可以制作和使 用自定义控件。Qt 支持 Microsoft Windows 下多个屏幕显示。
3\.Mac OS X
Qt 将 Cocoa® 和 Carbon® API 组合在一起用来支持 Mac OS X。
Qt/Mac 引入了布局并直接支持国际化,允许采用标准化方式访问 OpenGL,并使用 Qt Designer 提供了功能强大的可视化设计。Qt 使用事件循环处理文件和异步套接字的输入输 出。Qt 提供了稳定的数据库支持。开发人员可以使用流行的面向对象的 API 来创建 Macintosh 应用程序,该 API 具有综合文档和全部的源代码。
Macintosh 开发人员可以在自己喜欢的平台上创建应用程序,在其他受支持的平台 中,只需进行简单的重编译,即可显著扩大应用程序市场。 Qt 支持 Mac OS X 中通用的二 进制,这意味着可以为基于 Intel CPU 和 PowerPC CPU 的 Mac 创建 Qt 应用程序。
- 第 1 章 走近 Qt
- 1.1 Qt 简介
- 1.2 Qt 纪事概览
- 1.3 Qt 套件的组成(以 Qt4.5 为准)
- 1.4 Qt 的授权
- 1.5 Qt 的产品
- 1.6 Qt 的服务与支持
- 1.7 Qt 的最新进展
- 1.8为什么选择 Qt
- 1.9 问题与解答
- 1.10 总结与提高
- 第 2 章 Qt 的安装与配置
- 2.1 获取 Qt
- 2.2 协议说明
- 2.3 安装 Qt
- 2.4 配置 Qt4 环境
- 2.5 问题与解答
- 2.6 总结与提高
- 第 3 章 Qt 编程基础
- 3.1 标准 C++精讲
- 3.2 Windows 编程基础
- 3.3 Linux 编程基础
- 3.4 Mac 编程基础
- 3.5 问题与解答
- 3.6 总结与提高
- 第 4 章 Qt 4 集成开发环境
- 4.1 常见的 Qt IDE
- 4.2 Qt Creator
- 4.3 Eclipse
- 4.5 问题与解答
- 4.6 总结与提高
- 第 5 章 使用 Qt 基本 GUI 工具
- 5.1 使用 Qt Designer 进行 GUI 设计
- 5.2 使用 Qt Assistant 获取在线文档与帮助
- 5.3 使用 Qt Demo 学习 Qt 应用程序开发
- 5.4 问题与解答
- 5.5 总结与提高
- 第 6 章 Qt 4 程序开发方法和流程
- 6.1 开发方法
- 6.2 Hello Qt
- 6.3 几个重要的知识点
- 6.4 问题与解答
- 6.5 总结与提高
- 第 7 章 对话框
- 7.1 QDialog 类
- 7.2 子类化 QDialog
- 7.3 快速设计对话框
- 7.4 常见内建(built in)对话框的使用
- 7.5 模态对话框与非模态对话框
- 7.6 问题与解答
- 7.7 总结与提高
- 第 8 章 主窗口
- 8.1 主窗口框架
- 8.2 创建主窗口的方法和流程
- 8.3 代码创建主窗口
- 8.4 使用 Qt Designer 创建主窗口
- 8.5 中心窗口部件专题
- 8.6 Qt4 资源系统专题
- 8.7 锚接窗口
- 8.8 多文档
- 8.9 问题与解答
- 8.10 总结与提高
- 第 9 章 Qt 样式表与应用程序观感
- 9.1 应用程序的观感
- 9.2 QStyle 类的使用
- 9.3 样式表概述
- 9.4 使用样式表
- 9.5 问题与解答
- 9.6 总结与提高
- 第 10 章 在程序中使用.ui 文件
- 10.1 uic 的使用
- 10.2 Ui_YourFormName.h 文件的组成
- 10.3 编译时加入处理.ui 文件的方法
- 10.4 运行时加入处理.ui 文件的方法
- 10.5 信号与槽的自动连接
- 10.6 问题与解答
- 10.7 总结与提高 本章主要讲解了以下内容:
- 第 11 章 布局管理
- 11.1 基本概念和方法
- 11.2在 Qt Designer 中使用布局
- 11.3 基本布局实践
- 11.4 堆栈布局
- 11.5 分裂器布局
- 11.6 自定义布局管理器
- 11.7 布局管理经验总结
- 11.8 问题与解答
- 11.9 总结与提高
- 第 12 章 使用 Qt Creator
- 12.1 Qt Creator 概览
- 12.2 Qt Creator 的组成
- 12.3 快捷键和常用技巧
- 12.4 Qt Creator 构建系统的设置
- 12.5 处理项目间依赖关系( Dependencies )
- 12.6 Qt 多版本共存时的管理
- 12.7 使用定位器在代码间快速导航
- 12.8 如何创建一个项目
- 12.9 实例讲解
- 12.10 使用 Qt Creator 调试程序
- 12.11 问题与解答
- 12.12 总结与提高
- 第 13 章 Qt 核心机制与原理
- 13.1 Qt 对标准 C++的扩展
- 13.2 信号与槽
- 13.3 元对象系统
- 13.4 Qt 的架构
- 13.5 Qt 的事件模型
- 13.6 构建 Qt 应用程序
- 13.7 总结与提高
- 附录 A qmake 使用指南
- A.1 qmake 简介
- A.2 使用 qmake
- 附录 B make 命令
- B.1 命令解释
- B.2 使用 make 自动构建
- 附录 C Qt 资源
- C.1Qt 官方资源
- C.2 Qt 开发社区