QT基础模块:
Qt Core,提供核心的非 GUI 功能,所有模块都需要这个模块。这个模块的类包括了动画框架、定时器、各个容器类、时间日期类、事件、IO、JSON、插件机制、智能指针、图形(矩形、路径等)、线程、XML 等。所有这些类都可以通过 <QtCore> 头文件引入。
Qt Gui,提供 GUI 程序的基本功能,包括与窗口系统的集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图像、字体、拖放等。这些类一般由 Qt 用户界面类内部使用,当然也可以用于访问底层的 OpenGL ES 图像 API。Qt Gui 模块提供的是所有图形用户界面程序都需要的通用功能
Qt Multimedia,提供视频、音频、收音机以及摄像头等功能。这些类可以通过 <QtMultimedia> 引入,而且需要在 pro 文件中添加 QT += multimedia
Qt Network,提供跨平台的网络功能。这些类可以通过 <QtNetwork> 引入,而且需要在 pro 文件中添加 QT += network
Qt Qml,提供供 QML(一种脚本语言,也提供 JavaScript 的交互机制) 使用的 C++ API。这些类可以通过 <QtQml> 引入,而且需要在 pro 文件中添加 QT += qml
Qt Quick,允许在 Qt/C++ 程序中嵌入 Qt Quick(一种基于 Qt 的高度动画的用户界面,适合于移动平台开发)。这些类可以通过 <QtQuick> 引入,而且需要在 pro 文件中添加 QT += quick
Qt SQL,允许使用 SQL 访问数据库。这些类可以通过 <QtSql> 引入,而且需要在 pro 文件中添加 QT += sql。
Qt Test,提供 Qt 程序的单元测试功能。这些类可以通过 <QtTest> 引入,而且需要在 pro 文件中添加 QT += testlib
Qt Webkit,基于 WebKit2 的实现以及一套全新的 QML API(顺便说一下,Qt 4.8 附带的是 QtWebkit 2.2)
Qt 扩展模块则有更多的选择:
Qt Widgets,使用 C++ 扩展的 Qt Gui 模块,提供了一些界面组件,比如按钮、单选框等
Qt System Info,提供一套 API,用于发现系统相关的信息,比如电池使用量、锁屏、硬件特性等。
窗口组成:
添加菜单和工具栏的动作:
Qt 使用QAction
类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。
QAction
包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。
Qt 能够保证把QAction
对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说,如果我们在菜单中修改了QAction
的图标,那么在工具栏上面这个QAction
所对应的按钮的图标也会同步修改
设置快捷键:
我们使用了setShortcut()
函数,用于说明这个QAction
的快捷键。Qt 的QKeySequence
为我们定义了很多内置的快捷键,比如我们使用的 Open。你可以通过查阅 API 文档获得所有的快捷键列表。 这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")
来实现快捷键。
对象模型的效率——GUI 界面需要同时具有运行时的效率以及更高级别的灵活性
所谓“扩展”,实际是在使用标准 C++ 编译器编译 Qt 源程序之前,Qt 先使用一个叫做 moc(Meta Object Compiler,元对象编译器)的工具,先对 Qt 源代码进行一次预处理(注意,这个预处理与标准 C++ 的预处理有所不同。Qt 的 moc 预处理发生在标准 C++ 预处理器工作之前,并且 Qt 的 moc 预处理不是递归的。),生成标准 C++ 源代码,然后再使用标准 C++ 编译器进行编译
使用moc元对象编译器,为标准c++提供新的特性:
基于上下文的字符串翻译机制(国际化),也就是 tr() 函数,我们简单地介绍过
智能指针(QPointer),在对象析构之后自动设为 0,防止野指针;
信号槽机制,用于解决对象之间的通讯,这个我们已经了解过了,可以认为是 Qt 最明显的特性之一
布局管理器:
这就涉及到组件定位的机制。Qt 提供了两种组件定位机制:绝对定位和布局定位。
对话框:
模态对话框使用了exec()
函数将其显示出来。exec()
函数的真正含义是开启一个新的事件循环
事件驱动:
QString
的arg()
函数可以自动替换掉QString
中出现的占位符。其占位符以 % 开始,后面是占位符的位置,例如 %1,%2 这种
QString("[%1, %2]").arg(x, y); // 句将会使用 x 替换 %1,y 替换 %2,因此,这个语句生成的QString
为 [x, y]。