抓大放小,瞅瞅 Qt 的几个基础模块

2021-07-09 16:06:09 浏览数 (1)

大家好,我是工具人老吴。

对于 Qt 初学者而言,首先需要学习的就是 Qt 的基础模块 ( Qt Essentials )。

这些模块对于大多数 Qt 应用程序都是通用的,适用于 Qt 支持的所有平台,并且在整个 Qt5 生命周期中保持源码和二进制兼容。

另外一些用于特殊目的的模块,被视为附加模块 ( Qt Add-Ons ),即使它们在 Qt 所支持的所有平台上都可用。

Qt 基础模块

名称

功能

Qt Core

非图形相关的基础类。

Qt GUI

图形界面相关的基础类。

Qt Multimedia

用于支持音视频、摄像头功能的类。

Qt Multimedia Widgets

用于支持多媒体的图形类。

Qt Network

用于简化网络编程的类。

Qt QML

QML and JavaScript 相关的类。

Qt Quick

用于构建高动态和易交互的用户界面的声明式框架。

Qt Quick Controls

提供轻量级的 QML 类型,用于为桌面、嵌入式和移动设备创建高性能的用户界面。

Qt Quick Dialogs

用于创建对话框的 QML types。

Qt Quick Layouts

用于布局的 QML types

Qt Quick Test

用于对 QML 应用的进行单元测试

Qt SQL

用于 SQL 相关的操作

Qt Test

用于对 Qt 应用和库进行单元测试

Qt Widgets

提供了一组 UI 元素来创建经典用户界面

Qt Core; Qt GUI; Qt Widgets; Qt Multimedia; Qt Network; Qt QML; Qt Quick;

Qt Core 模块

提供了 Qt 里最核心的、且非 GUI相关的功能,包括但不限于:

1、 最核心的功能,包括元对象系统 ( QObject )、属性系统 ( Q_PROPERTY() ),对象模型 ( QMetaXXX )、信号槽机制 (用于对象间通讯)等;

2、线程 ( QThread、QRunnable 等 )和并发 ( QMutex、QSemaphore 等 );

3、输入/输出 ( QIODevice 等 )、资源 ( xxx.qrc文件 ) 和容器 ( QVector<T> 等 );

4、附加框架,包括动画 ( QXXXAnimation )、JSON ( QJsonXXX )、状态机 ( QStateMachine )、插件 ( QXXXPlugin ) 、事件处理 ( QEvent ) 等;

5、等等...

更详细的说明:

https://doc.qt.io/qt-5/qtcore-index.html

Qt GUI 模块

提供 GUI 程序的基本功能,包括与窗口系统的集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图像、字体、拖放等。

这些类一般由 Qt 用户界面类内部使用,同时也可以被用于访问底层的 OpenGL ES 图像 API。

按功能细分:

1、应用窗口 (QGuiApplication、 QWindow 等)。

QGuiApplication 提供主事件循环,所有的事件包括界面绘画和用户输入等都会在这个循环里进行处理和分发。

QWindow 在底层窗口系统中代表一个窗口。

2、2D 图像 ( QPainter 、QImage 等 )、字体 ( QFont )。

3、OpenGL and OpenGL ES ( QOpenGLContext 等)相关的整合。Qt 支持用 OpenGL and OpenGL ES 来渲染窗口。

4、Vulkan 相关的整合 (QVulkanInstance、QVulkanWindow 等)。

5、拖放相关 (QDrag、QDragEnterEvent)

更详细的说明:

https://doc.qt.io/qt-5/qtgui-index.html

Qt Widgets 模块

Qt Widgets 提供了一组的 UI 元素,用于构建用户界面。

Widget 是在 Qt 中创建用户界面的主要元素,它可以显示数据和状态信息,接受用户输入,或者作为容器用于包含其他 Widget。

QWidget 类提供了向屏幕渲染和处理用户输入事件的基本能力。Qt 提供的所有 UI 元素要么是 QWidget 的子类,要么是与 QWidget 子类关联使用。通过子类化 QWidget 并重新实现虚拟事件处理可以创建自定义的 Widget。

Qt Widgets 里的包含的类非常多,常见的如:QPushButton、QSlider、QComboBox、QDialog、QLineEdit,大概有几十个吧。

完整的类列表:

https://doc.qt.io/qt-5/qwidget.html

更详细的说明:

https://doc.qt.io/qt-5/qtwidgets-index.html

Qt Multimedia 模块

Qt 多媒体相关的支持都位于此模块中。

支持的功能:

  • 访问原始音频设备进行输入和输出;
  • 播放低延迟的声音效果;
  • 播放播放列表中的音视频文件;
  • 录制音频并进行压缩;
  • 调整和收听广播电台;
  • 使用相机,包括取景器、图像捕捉和电影录制;
  • 等等...

按功能划分:

1、音频相关。

Qt Multimedia 提供了一系列的音频类,涵盖了音频输入 ( QAudioRecorder )、输出 ( QMediaPlayer ) 和处理的低级和高级用法 ( QSoundEffect、QAudioEncoderSettings) 等。

2、视频相关。

Qt Multimedia 提供了用于播放和操作视频数据的上层和底层 C 类。例如,解码 (QMediaPlayer ),编码 ( QMediaRecorder )、帧数据 ( QVideoFrame )、显示控件 ( QVideoWidget、QGraphicsVideoItem ) 等。

3、Camera 相关

Qt Multimedia 提供了许多 Camera 相关的类。例如,探测 Camera ( QCameraInfo、QCamera )、预览 ( QCameraViewfinder )、采集图像 ( QCameraImageCapture )、录制视频 ( QMediaRecorder )、参数控制 ( QCameraFocus、QCameraExposure ) 等;

4、Radio 相关

暂时用不到,就不展开了。

更详细的说明:

https://doc.qt.io/qt-5/qtmultimedia-index.html

Qt Network 模块

Qt Network 提供了一系列的网络类,极大地简化了网络编程。

按功能划分:

1、HTTP 、FTP 相关。

包括管理网络访问 ( QNetworkAccessManager )、发送请求 ( QNetworkRequest )、接收响应和数据 ( QNetworkReply )。

2、TCP 相关。

包括 TCP Socket 通讯 ( QTcpSocket )、搭建 TCP 服务端 ( QTcpServer ) 等。

3、UDP 相关。

主要就是 UDP Socket 通讯 ( QUdpSocket )。

4、其他。

主机信息 ( QHostInfo )、代理 ( QNetworkProxy );

更详细的说明:

https://doc.qt.io/qt-5/qtnetwork-index.html

Qt QML 模块

QML 是一种用于描述应用程序用户界面的声明式编程语言。

Qt QML 模块为用 QML 开发应用程序和库提供了一个框架。它定义并实现了 QML 语言和引擎的基础结构。

另外,它支持应用程序开发人员能够用自定义类型来扩展 QML语言,并使 QML、JavaScript 和 C 进行混合开发。

以入门为目的话,先掌握如何使用 QML 就好,不需要了解 QML 模块的内部实现。

Qt QML 的入门还是比较容易的,感兴趣的可以参考文章:

用一篇小短文,带你进入 QML 的美妙世界

这几个 QML 版的 Hello World 你学会了吗?

更详细的说明:

https://doc.qt.io/qt-5/qtqml-index.html

Qt Quick 模块

Qt Quick 模块是编写 QML 应用程序的标准库。

虽然 Qt QML 模块提供了 QML 引擎和语言基础设施,但 Qt Quick 模块提供了用 QML 创建用户界面所需的所有基本类型,包括一些 C 的类,和大量的 QML Types。

QML Types 的作用和 C 里的 Class 类似,它们都是对事物的抽象,用户使用它们进行对象的实例化。

作为初学者,我们应该先重点关注 QML Types。

Qt Quick 里有非常多的 QML Types,大多数都继承自 Item 这个 QML Type。

代码语言:javascript复制
Window {
    [...]
    Item {
        Image {
            source: "qrc:/logo.png"
        }
        Image {
            width: 100
            height: 100
            source: "qrc:/logo.png"
        }
    }
}

由于数量太多,这里就不展开了,见下面的表格。

Qt Quick 里所有的 QML Types :

https://doc.qt.io/qt-5/qtquick-qmlmodule.html

更详细的说明:

https://doc.qt.io/qt-5/qtquick-index.html

到此,Qt 里最重要的几个基础模块就介绍完毕了。

你们学会了吗?

另外,新建了一个读书群,用于培养读书习惯,欢迎阅读爱好者们加入:

感谢阅读~~~

—— The End ——

0 人点赞