这 6 个模块覆盖了一个典型 Qt 桌面应用从"基础运行→界面绘制→工具链→多媒体→网络授权"的完整链路,qt5-base是不可缺失的地基,其余 5 个是按需引入的功能扩展。下面为您逐一拆解。
模块速查表
| 模块 | 所属分类 | 核心功能 | 典型类/工具 | 是否必需 |
|---|---|---|---|---|
| qt5-base | Qt Essentials | 框架基础:核心非图形类、GUI、控件、网络、SQL、并发等 | QObject, QWidget, QNetworkAccessManager, QSqlDatabase | ✅ 必装 |
| qt5-tools | Qt Tools | 开发工具集:界面设计器、翻译工具、帮助文档生成、DBus 查看器等 | Designer, Linguist, lupdate/lrelease, qdoc, pixeltool | ⚠️ 开发期强烈推荐 |
| qt5-imageformats | Qt Add-Ons | 扩展图片格式插件:TIFF、WebP、MNG、TGA、ICNS、WBMP 等 | (插件形式,无独立 API) | 按需 |
| qt5-svg | Qt Add-Ons | SVG 矢量图形的显示与生成 | QSvgRenderer, QSvgGenerator, QGraphicsSvgItem | 按需 |
| qt5-multimedia | Qt Essentials | 音频、视频、摄像头、录音播放 | QMediaPlayer, QCamera, QAudioOutput, QVideoWidget | 按需 |
| qt5-networkauth | Qt Add-Ons | OAuth 1/2 在线授权认证 | QOAuth2AuthorizationCodeFlow, QOAuth1, QAbstractOAuth | 按需 |
逐模块详细解析
1. qt5-base —— 框架地基,不可不装
这是整个 Qt5 的核心端口,官方描述为“Qt5 Application Framework Base Module. Includes Core, GUI, Widgets, Networking, SQL, Concurrent and other essential qt components.”
它内部打包了多个子模块:
- Qt Core:非图形基础类,如字符串(QString)、容器(QList/QMap)、事件循环、信号与槽、文件 I/O、线程(QThread)、JSON/XML 处理等。几乎所有 Qt 程序的第一行
#include <QObject>都来自这里。 - Qt GUI:基础图形类,包括 QImage、QPixmap、QFont、QPainter、OpenGL 集成、窗口系统集成等。
- Qt Widgets:基于 C++ 的传统桌面控件,如 QMainWindow、QPushButton、QDialog、QTableView 等,是传统桌面 GUI 程序的主力。
- Qt Network:TCP/UDP socket、HTTP 客户端(QNetworkAccessManager)、SSL/TLS、DNS 等网络编程类。
- Qt SQL:数据库访问抽象层,支持 SQLite、MySQL、PostgreSQL、ODBC 等驱动。
- Qt Concurrent:简化多线程编程的高层 API,如 QFuture、QtConcurrent::run。
- Qt Test:单元测试框架。
在 vcpkg 中,qt5-base的编译依赖 zlib、libjpeg-turbo、libpng、freetype、pcre2、harfbuzz、sqlite3、openssl 等大量第三方库。其他所有 qt5-模块都以它为 Build-Depends*,因此它必须最先安装。
典型使用场景:任何 Qt 程序——无论是命令行工具、传统窗口程序还是 QML 应用——都离不开它。
2. qt5-tools —— 开发期工具链
这个端口提供 Qt 官方配套的开发与辅助工具集,源码对应上游的qttools模块。它本身不参与程序运行,但在开发阶段极为常用。主要包含:
- Qt Designer(designer.exe):可视化 UI 设计器,通过拖拽控件生成
.ui文件(XML 格式),实现视图与逻辑分离。 - Qt Linguist(linguist.exe)+ lupdate/lrelease:国际化(i18n)工具链。lupdate 从源码提取待翻译字符串到
.ts文件,Linguist 供翻译人员编辑,lrelease 把.ts编译成二进制.qm供程序加载。 - Qt Assistant / Qt Help(qdoc, qcollectiongenerator):离线帮助文档查看器与帮助文件生成工具。
- pixeltool:像素级放大镜,用于精确调试界面像素对齐。
- qdbusviewer:D-Bus 接口查看器(Linux 下调试进程间通信)。
- qtdiag / qtpaths / qtplugininfo:Qt 运行环境诊断工具。
典型使用场景:开发期设计界面、做多语言翻译、查看 Qt 文档、排查插件加载问题。如果不安装,仍可手写代码开发,但效率会大打折扣。
3. qt5-imageformats —— 扩展图片格式插件
Qt GUI 模块默认只支持 PNG、JPEG、BMP、GIF 等少数常见格式。qt5-imageformats是一个附加格式插件集,以插件形式透明扩展 Qt 的图像 I/O 系统,本身不提供独立 API,仍通过QImage::load/save、QImageReader/QImageWriter调用。
它补充支持以下格式:
| 格式 | 说明 | 支持操作 | 第三方编解码 |
|---|---|---|---|
| TIFF | 标签图像文件格式 | 读/写 | 内置 |
| WebP | Google 现代图片格式 | 读/写 | 内置 |
| MNG | 多帧网络图形 | 读 | 需外部 |
| TGA | Truevision 图形 | 读 | 无 |
| ICNS | Apple 图标格式 | 读/写 | 无 |
| WBMP | 无线位图 | 读/写 | 无 |
在 vcpkg 中,qt5-imageformats依赖tiff和libwebp,编译时会自动拉取这两个库。 | |||
| 典型使用场景:程序需要加载 TIFF 文档扫描件、WebP 网络图片、macOS 图标资源等非默认格式时安装。普通 PNG/JPEG 应用不需要。 |
4. qt5-svg —— SVG 矢量图形支持
提供 SVG(可缩放矢量图形)的渲染与生成能力,属于 Qt Add-Ons。核心类包括:
- QSvgRenderer:将 SVG 文件或 SVG XML 内容绘制到任意 QPaintDevice(如 QWidget、QImage)上,支持动画。
- QSvgGenerator:把 QPainter 绘制内容导出为 SVG 文件。
- QGraphicsSvgItem / QSvgWidget:用于在 QGraphicsScene 或独立窗口中显示 SVG。
SVG 的优势是矢量无损缩放,非常适合图标、图表、UI 装饰元素等需要适配不同分辨率(高 DPI)的场景。
典型使用场景:程序使用 SVG 图标集、绘制可缩放矢量图表、导出矢量图形文档。值得注意的是,若要支持 SVG 动画或更完整的 SVG 特性,Qt5 中还需搭配qt5-declarative(Qt Quick)使用。
5. qt5-multimedia —— 音视频与摄像头
这是 Qt Essentials 中的多媒体模块,提供跨平台的音频、视频、广播、相机功能。核心类包括:
- QMediaPlayer:播放音频/视频文件,支持本地文件和网络流。
- QCamera / QMediaCaptureSession:摄像头采集、拍照、录像。
- QAudioOutput / QAudioInput:底层音频输出与录音。
- QVideoWidget / QGraphicsVideoItem:视频显示控件。
- QMediaRecorder:录制音视频到文件。
它底层依赖各平台的媒体框架(Windows 上是 Media Foundation/DirectShow,Linux 是 GStreamer,macOS 是 AVFoundation),因此同一个 API 可跨平台运行。
典型使用场景:音乐播放器、视频播放器、视频会议、监控摄像头预览、语音录制。注意在 vcpkg 中它依赖qt5-declarative(Qt Quick),编译时间较长。
6. qt5-networkauth —— OAuth 在线授权
这是 Qt 5.8 引入的 Add-On 模块,提供一套 API 让 Qt 应用以 OAuth 方式获取对在线账户和 HTTP 服务的有限访问权限,无需暴露用户密码。目前支持OAuth 1.0 和 OAuth 2.0两种协议。
核心类层级:
- QAbstractOAuth:所有 OAuth 实现的抽象基类,定义了授权 URL、客户端标识、状态等通用接口。
- QAbstractOAuth2 / QOAuth2AuthorizationCodeFlow:OAuth 2.0 实现,支持授权码流程(最常用的"Sign in with Google/GitHub/Microsoft"场景)。
- QOAuth1:OAuth 1.0a 实现。
- QOAuthOobReplyHandler / QOAuthHttpServerReplyHandler:处理授权回调。
使用时需在.pro文件中加QT += network networkauth。
典型使用场景:接入第三方登录(Google、GitHub、Microsoft 账号登录)、调用需要授权的 REST API(如 Twitter API、Office 365 EWS、Dropbox 云存储)。如果你的程序不涉及在线账号授权,这个模块可以省略。
模块依赖关系总览
蓝色为必需地基,绿色为功能扩展(按需),橙色为开发工具。
安装与使用建议
- 最小化安装:只装
qt5-base即可开发基础 GUI 程序。 - 典型桌面开发:
qt5-base+qt5-tools(设计与翻译)+qt5-svg(矢量图标)覆盖 80% 场景。 - 多媒体类应用:追加
qt5-multimedia。 - 涉及第三方登录/云服务:追加
qt5-networkauth。 - 图像处理类应用:追加
qt5-imageformats。 - 在 CMake 中使用时,通过
find_package(Qt5 COMPONENTS Core Widgets Multimedia REQUIRED)按需声明组件,避免链接冗余库。