接下来我们看看Qt的主要模块,Qt主要分成了三个大的部分:
- Qt Essentials(基本模块):该部分定义了Qt在所有平台上的基础组件,基本模块是通用的,对大多数Qt应用程序都很有用。
- Qt Add-Ons(附加模块):用于特殊用途的模块被视为附加模块,即使它在所有受支持的平台上都可用。Qt附加模块为特定目的带来了额外的价值。这些模块可能仅在某些开发平台上可用。
- Qt Add-Ons in Technical Preview(附加预览模块):仍在开发中,但可作为技术预览版使用的模块。从这一部分中我们看出来Qt未来的技术方向。
这个图中表示了现在Qt的主要模块,这些模块大部分都是在Qt基本模块中定义的,Qt主要分成了Qt GUI部分和Qt Quick部分:
Qt GUI部分是现在使用Qt的主流图形接口开发方法,其主要由QApplication、QWindow、Widgets以及各种功能模块组成。
Qt Quick是在Qt4.7之后追加进来的核心组件,Qt Quick是一组旨在帮助开发者创建在移动电话、媒体播放器、机顶盒和其他便携设备上的应用程序。但是在桌面端依然还是不温不火的状态。其主要原因是,如果我们采用QML进行桌面开发的话,就要接受一种全新的程序设计思想,这个和WPF一直不温不火的原因几乎相同。主要是采用了新的程序设计思想,增加了程序设计的难度,程序员的接受度不高。
下面这个表格详细的说明它们之间的相同点和不同点:
Quick | Widgets | 说明 | |
使用的语言 | C++ | ||
原生外观 | ● | ● | 支持其目标平台上的原生外观和感觉。 |
自定义样式 | ● | ● | Qt Widgets提供自定义功能 |
流畅的动画 UI | ● | Qt Widgets不能很好地扩展动画。 | |
触摸屏 | ● | Qt Widgets通常需要鼠标光标才能进行良好的交互, | |
标准行业小部件 | ● | Qt Widgets提供了构建标准工业类型应用程序所需的各种功能,并且这些功能已经发展了二十年。 | |
模型/视图编程 | ● | ● | Qt Quick提供了方便的视图,但Qt Widgets提供了更方便和完整的框架。 |
快速UI开发 | ● | ● | Qt Quick是快速UI原型设计和开发的绝佳选择。 |
硬件加速图形 | ● | ● | Qt为Qt Quick接口提供完整的硬件加速,Qt Widgets接口在软件中呈现。 |
图形效果 | ● | Qt Quick模块的图形效果更佳 | |
富文本处理 | ● | ● | Qt Widgets目前为实现文本编辑器提供了最全面的基础。 |
我们这个教程也还是主要介绍传统的GUI程序设计。其实不管是GUI程序还是Quick程序,我们在设计一个图形接口程序的时候,基本上有下面几部分组成:
- 窗口:就是一个桌面程序的主体,我们会在上面增加各种控件来进行显示,控制等交互动作。
- 控件:需要在窗口上放置标签、文本框、按钮等各种控件,来进行交互,如果复杂的程序可能还会要求有图表,动画等。
- 数据:不论是程序自身产生的数据,还是其他来源的数据,最终我们都需要进行加工整理后,或者表示在对应的控件上,或者进行保存处理。
- 操作:就是对控件或者其他来源的动作进行相应的相应。
Qt在这些方面给我们提供了非常完善的解决方案。
我们从Qt Framework的体系结构图中可以非常清晰的看出来Qt为GUI程序设计给我们提供的功能,尤其是在GUI部分,从窗口到控件整体功能非常完善。
如体系结构图所示,Qt的窗口有QMainWindow和QDialog两种,这里需要注意的是,Qt把所有未嵌入到父部件中的Widget都称为窗口,虽然在Qt中QMainWindow和QDialog的各种子类是最常见的窗口类型,同时我们也可以把一个单独的Widget直接显示,这个时候这个部件自己就是一个窗口。这可能是因为在嵌入式开发中要尽可能的节约硬件资源,所有Qt Framework才进行了如此的设计。
Qt部件中的Graphics View部分,是使用OpenGL开发的,它使用 BSP(二进制空间分区)树来提供非常快速的对大量组件的访问能力,因此,它可以处理拥有大量可视化组件的大型场景,同时它也能够支持缩放和旋转。
如上图所示,Qt将部件分成四种类型:基本部件(Basic Widget)、高级部件(Advanced Widget)、抽象部件(Abstract Widget)、组织部件(Organizer Widget),除此之外还有Styles、Layouts等辅助用的组件,
这其中抽象部件是提供了各种方法的基类,我们可以忽略,我们重点关注基本部件、高级部件中常用的部件,同时在学习的过程中也会涉及到组织部件、风格处理、布局等相关的内容。
下面这个表格中是所有的基本部件:
带有文本标签的复选框 | |
将按钮与下拉列表组合在一起 | |
Vista 样式的命令链接按钮 | |
用于编辑基于QDateTimeEdit 部件的日期的部件 | |
用于编辑日期和时间的小部件 | |
四舍五入范围控制(如车速表或电位计) | |
采用双打的旋转框小部件 | |
焦点框,可以在部件的正常可绘制区域之外 | |
允许用户选择字体系列的组合框 | |
显示带有类似 LCD 数字的数字 | |
文本或图像显示 | |
单行文本编辑器 | |
用于菜单栏、上下文菜单和其他弹出菜单的菜单部件 | |
水平或垂直进度条 | |
命令按钮 | |
带有文本标签的单选按钮 | |
将视图滚动到另一个部件上 | |
垂直或水平滚动条 | |
调整用于调整顶级窗口大小的句柄 | |
垂直或水平滑块 | |
旋转框部件 | |
选项卡栏,例如用于选项卡式对话框 | |
选项卡式部件堆栈 | |
用于基于 QDateTimeEdit 部件的编辑时间的部件 | |
选项卡式小组件项列 | |
命令或选项的快速访问按钮,通常在 QToolBar 中使用 | |
所有用户界面对象的基类 |
下面这个表格中是所有的高级部件:
基于每月的日历小部件,允许用户选择日期 | |
列视图的模型/视图实现 | |
数据模型的一部分与小组件之间的映射 | |
模型上的列表或图标视图 | |
表视图的默认模型/视图实现 | |
树视图的默认模型/视图实现 | |
显示 QUndoStack 的内容 |
经常有一些教程让我们不要过多关注部件,但实际上开始学习一个新的语言或者框架的时候,如果能够在学习的每一步都能够清晰的看到自己的成果,这对我们的学习和坚持是有非常大的帮助的。
所以我们将从这两部分中选择一些常用的部件开始我们的学习。
当然如果想要成为一个成熟的Qt GUI程序员,这些部件应该都要熟练掌握,包括这些部件的外观,常用属性,从而开始程序设计的时候更加得心应手,少走弯路。