Qt基础认知
Qt概述
Qt特点
Qt框架
- Qt的实质 Qt不是编程语言,也不是IDE(如Qt Creator),而是用C++编写的大型类库。 Qt为跨平台应用开发提供了完整框架,包含支持GUI、数据库、网络、多媒体等各种应用的编程类。
- Qt的功能 提供丰富的类库支持多种应用开发。 具备跨平台开发能力,支持多种目标平台。
Qt的跨平台开发能力详解
Qt项目源代码具有跨平台性:在一个主机平台上编写的代码,经过在另一个主机平台或目标平台上的重新编译,即可生成适用于该平台的应用软件。
编译后生成的是目标平台的原生二进制代码,无需虚拟机运行,保证了高效率。
作为Qt开发的典型案例,WPS Office拥有在Windows、macOS、Linux系统上运行的桌面版本,以及iOS和Android系统上的移动版本,充分展示了Qt的跨平台开发能力。
- 支持的目标平台
- 桌面应用:支持Windows、桌面Linux、macOS。
- 移动设备应用:支持Android、iOS、Windows移动操作系统。
- 嵌入式设备应用:支持QNX、嵌入式Linux、VxWorks等,适用于如轿车全液晶仪表盘等。
- MCU应用:支持FreeRTOS或无操作系统的MCU,需深度定制,目前仅支持部分型号单片机开发板。
- 交叉编译开发方式
- 嵌入式设备由于资源有限,需采用交叉编译方式开发。
- 在计算机(主机)上编写、编译源程序,然后将二进制文件下载到目标设备上运行。比如STM32单片机开发程序。
- 主机平台与Qt版本
- Qt提供了安装在Windows、桌面Linux、macOS三种主机平台上的对应版本。
- 针对特定目标平台开发应用时,必须使用对应主机平台的Qt版本。
- 开发Windows计算机应用需使用Windows平台上的Qt;开发iOS应用需使用macOS平台上的Qt。
Qt的开发优势
- 降低学习成本
- 熟悉Qt框架后,开发者可以运用相同的开发方法,为不同设备(如桌面、手机、嵌入式设备、MCU)开发程序,无需额外学习不同平台的开发技术。
- 提高开发效率
- 统一的开发方法和搭建好的交叉编译环境,使得开发者能够快速适应不同平台的开发需求,减少了学习和适应新环境的时间成本。
- 以开发桌面GUI程序为例,用Qt开发的方法同样适用于手机、嵌入式设备和MCU的GUI程序开发,只需搭建好相应的交叉编译开发环境即可。
Qt许可类型
Qt的许可类型
Qt提供了两种主要的许可类型:商业许可和开源许可。这两种许可类型在费用、源代码公开要求以及模块可用性方面存在显著差异。
- 商业许可
- 特点:需要按年付费,允许开发者不公开项目的源代码。
- 模块:商业许可的Qt安装包包含更多模块,部分模块仅在此版本中可用。
- 适用场景:适用于希望保持源代码私密性的开发者或企业。
- 开源许可分类:进一步分为GPLv2/GPLv3和LGPLv3两种。
- GPLv2/GPLv3:
- 特点:若使用GPL许可的Qt代码,则用户程序也必须使用GPL许可,即必须开源。
- 要求:GPLv3还要求公开相关硬件信息。
- 适用场景:适用于愿意开源自己代码并接受GPL许可约束的开发者。
- LGPLv3:
- 特点:若修改LGPL许可的Qt代码并发布,则发布代码必须遵循LGPL许可并开源;但若只是链接或调用LGPL许可的Qt代码,则用户代码可以闭源并商业化销售。
- 适用场景:为希望保持部分代码私密性同时利用Qt功能的开发者提供了更灵活的选择。
- GPLv2/GPLv3:
安装包
Qt根据开发目标的不同,提供了三种不同的安装包,以满足不同场景下的开发需求。
Qt安装包分类
| Qt产品 | 目标 | 许可协议 | 平台版本 | 总结 |
|---|---|---|---|---|
| Qt for Application Development | 用于为计算机和移动设备开发应用 | 商业和开源 | 支持Windows、Linux、macOS等多种主机平台 | 理想选择,适合广泛兼容性项目的跨平台桌面和移动应用开发 |
| Qt for Device Creation | 专注于为嵌入式设备开发应用 | 商业 | 支持Windows和Linux主机平台 | 针对嵌入式设备优化,适合需要专业支持和技术服务的项目 |
| Qt for MCUs | 为MCU开发GUI程序 | 商业 | 支持Windows和Linux主机平台 | 专为MCU开发设计,适合资源有限设备上实现复杂GUI功能的嵌入式项目 |
Qt框架提供了多个版本以满足不同应用场景的需求,每个版本在许可类型、功能特性和应用场景上都有所不同。
Qt for Device Creation和Qt for MCUs专注于嵌入式设备和微控制器的软件开发,仅提供商业许可但可申请免费试用,并且由于开发难度较高,可能需要Qt公司的技术支持。
Qt for Application Development则提供了开源许可版本,支持多种主机平台,适用于开发桌面应用及移动设备应用,是初学者的理想选择。
对于初学者而言,推荐使用Qt for Application Development的开源许可版本,并先从Windows平台的C++桌面应用开发入手。
在掌握基础后,可以进一步拓展至Linux和macOS的桌面应用开发。若需开发嵌入式设备的GUI程序,则需先搭建交叉编译开发环境,但Qt类库的编程接口在不同平台上是一致的,这降低了跨平台开发的难度。
Qt支持的开发语言
Qt的原生语言支持:C++与QML
- C++支持
- Qt类库基于C++语言编写,提供了强大的跨平台和GUI开发能力。
- Qt对标准C++进行了扩展,如信号与槽、属性等机制,简化了对象间通信。
- QML引入
- QML是Qt自创的声明性语言,类似于JavaScript,用于描述用户界面。
- QML以对象树形式组织用户界面,每个对象具有自己的属性,适合触摸屏设备。
- QML与C++可混合使用,QML负责界面,C++处理业务逻辑。
- QML在MCU中的应用
- Qt for MCUs支持轻量化的QML控件库Qt Quick Ultralite。
- QML代码会被转换为C++代码以适应MCU的资源限制。
Qt的Python支持
- Python绑定的存在
- Qt C++类库可以被转换为Python绑定,允许使用Python进行GUI开发。
- PyQt与PySide
- PyQt:由Riverbank Computing公司开发,历史悠久,应用广泛。
- PyQt5对应Qt 5,PyQt6对应Qt 6。
- 采用商业许可和GPLv3开源许可。
- PySide:Qt官方的Python绑定项目。
- PySide2对应Qt 5,PySide6对应Qt 6。
- 早期PySide1因维护问题知名度较低,但自2015年起Qt官方重新重视并更新。
- 采用商业许可和LGPLv3开源许可,对商业开发者更友好。
- PyQt:由Riverbank Computing公司开发,历史悠久,应用广泛。
Qt6新特性
| 特性 | 描述 |
|---|---|
| C++17标准的支持 | Qt 6.0要求编译器兼容C++17新标准,以提供更现代、更高效的编程基础。 |
| 核心库改动 | 新的属性和绑定系统 全面支持Unicode字符串 统一QList和QVector为QList 优化QMetaType和QVariant类 |
| 新图形架构 | RHI作为3D图形渲染的抽象层,支持Vulkan、Metal、Direct 3D等API,使Qt跨平台使用本地化3D图形API。 |
| 支持CMake | 支持CMake并建议新项目使用,qmake仍在生命周期内支持以确保向后兼容。 |
| 其他改进 | 改进多媒体、网络、Qt Quick 3D等模块 提升功能性和性能 高度兼容Qt 5,方便迁移 |
| 版本发布补充 | Qt 6.0不包含Qt 5.15的所有模块,后续版本(如Qt 6.1、Qt 6.2)逐渐增加,Qt 6.2为首个LTS版本,提供稳定、全面的开发环境。 |
Qt安装
要先用邮箱登录,这里可以自己注册。

选择安装组件

安装选项
Qt版本的选择
- 从Qt5.15开始,Qt的开源版本仅提供在线安装方式。
- 在线安装软件支持安装Qt 5.9之后的Qt 5和Qt 6版本,极大地方便了用户。
- Qt 6.2是一个LTS(长期支持)版本,包含Qt框架的所有模块。
版本分类:
- Archive:存档版本,包含历史版本。
- LTS:长期支持版本,提供稳定且长期的技术支持。
- Latest releases:最新发布的版本,包含最新的功能和修复。
- Preview:技术预览版本,提供前沿但可能不稳定的功能。
默认情况下显示最新发布和技术预览版本。
勾选Archive可显示历史版本。
组件安装
开发套件(Kit)选择
- 开发套件是Qt框架源代码经特定编译器编译后的库。
- 构建Qt项目时,必须选择一种开发套件。
- 示例套件:
- WebAssembly(TP):技术预览版,适用于Web应用。
- MSVC 2019 ARM64(TP):适用于ARM64架构,一般Windows计算机不需要。
- MSVC 2019 64-bit:需要单独安装Visual Studio 2019,特定章节需要。
- MinGW 11.2.0 64-bit:推荐的学习用套件,安装文件小,多数示例使用。
特定平台套件
- Android套件:用于Android应用开发,不涉及的话不需要安装。
源代码与模块
- Sources:Qt框架源代码,占用空间大,非必要不安装。
- Qt Quick 3D:QML的3D图形功能API,不涉及QML编程,可以不安装。
- Qt 5 Compatibility Module:为兼容Qt 5设计的模块,建议安装以保持一定兼容性。
- Qt Shader Tools:3D图形着色模块,空间占用小,可根据需要安装。
附加库与调试信息
- Additional Libraries:Qt框架的附加模块,如Qt Charts、Qt Multimedia,建议安装。
- Qt Debug Information Files:调试信息文件,占用空间大,非调试需求可不安装。
- Qt Quick Timeline:Qt Quick模块,用于Qt Design Studio和Qt Quick Designer,如果不涉及QML,可以不安装。
组件详解
Qt Creator及其相关组件
- Qt Creator 6.0.2
- 必须安装的组件,用于开发Qt程序。
- 默认自动安装,是Qt开发的基础。
- Qt Creator 6.0.2 CDB Debugger Support
- 为Qt Creator提供CDB调试器支持。
- 用于在Windows平台上进行程序调试,必须安装CDB Debugger Support以使用断点调试功能。
- Debugging Tools for Windows
- 提供MSVC编译程序的调试器和工具。
- 如果不使用MSVC编译器,可以选着不安装。
Qt Creator的Debug Symbols及插件开发支持
- Qt Creator 6.0.2 Debug Symbols
- 为Qt Creator中的程序调试提供符号文件。
- 虽然不是必需的,但安装后可以方便进行调试。
- 需要占用约1.5GB的硬盘空间。
- Qt Creator 6.0.2 Plugin Development
- 开发Qt Creator插件所需的头文件和库文件。
- 如果有计划开发或定制Qt Creator插件,则需要安装此组件。
Qt Design Studio及其他设计工具
- Qt Design Studio 2.3.1-community
- QML编程设计界面的工具软件。
- 如果需要进行QML编程和界面设计,则必须安装Qt Design Studio。
其他工具包
MinGW是Windows平台上使用的GNU工具集,包含GNUC++编译器,是Qt开发套件的重要组成部分。
- 版本对应:安装Qt开发套件时,需要选择与套件对应版本的MinGW。
- 比如已安装Qt 6.2.3的MinGW 11.2.0 64-bit开发套件,因此需安装相同版本的MinGW 11.2.0 64-bit。
常见工具包:
| 软件名称 | 功能描述 | 学习或项目应用场景 | 安装建议 |
|---|---|---|---|
| Qt Installer Framework | 为发布应用软件制作安装包的工具软件 | 制作 Qt 应用软件安装包 | 根据学习或项目需求选择安装 |
| CMake | 构建工具,支持大型软件项目构建,与 Qt 6 兼容并推荐使用 | 大型软件项目构建,尤其在大型 C++ 项目中常用 | 推荐安装 CMake 3.21.1 64-bit,尽管示例使用 qmake,但也会介绍 CMake 的使用方法 |
| Ninja | 小型的构建系统,专注于构建速度,与 CMake 可以结合使用以提高构建效率 | 提高项目构建速度,尤其是在需要快速迭代开发时有用 | 建议安装,Ninja 安装文件小且能提高构建速度 |
| OpenSSL | 实现了 SSL 协议的开源工具包,用于保障网络通信安全 | 内容不涉及 OpenSSL 的编程使用,但在其他项目或开发中可能会用到 | 根据当前学习或项目需求暂时不需要安装,但如果后续项目中涉及网络通信安全可以考虑安装 |
Qt项目管理
新建
Qt Creator中创建Qt Widgets Application项目的流程
项目创建起点
- 在Qt Creator中,通过点击菜单项File→New File or Project,打开新建项目或文件的对话框。
- 选择:在对话框左侧列表框中点击Application(Qt),中间列表框中列出可创建的项目类型,包括Qt Widgets Application、Qt Console Application和Qt Quick Application。


选择项目类型:
- 类型:选择Qt Widgets Application,这是基于界面组件的GUI程序,使用C++语言编程。
- 常用的示例基本上都是此类项目,称为GUI项目或应用项目。


项目名称与存储路径设置:
- 点击Choose按钮后,进入新建项目向导,选择项目存储目录并设置项目名称。


选择构建系统
- 选项:在向导中,可以选择qmake或CMake作为构建系统,默认选择qmake。


设置窗口类名称与选择窗口基类
- 进入下一步后,设置窗口类名称,并从Base class下拉列表框中选择窗口基类。
- 窗口基类:QMainWindow:主窗口类,具有菜单栏、工具栏和状态栏。QWidget:所有界面组件类的基类,可以作为独立的空白窗口。QDialog:对话框类,窗口具有对话框的显示效果。


选择翻译文件
- 在接下来的一步中,选择翻译文件,若项目不需要多语言界面,则使用默认的None。


选择开发套件
- 进入选择开发套件的界面,一个Qt项目必须选择一个开发套件,开发套件隐含了所用的编译器。


项目创建总结与完成
- 点击Next按钮后进入总结界面,显示项目存储路径和将要创建的文件清单,还可以为项目设置版本控制工具。


构建
开发套件的选择
- 位置:界面左侧一栏的Build & Run下面显示了所有开发套件。
- 选择方式:点击某个套件,其会变为粗体字显示,表示这是当前使用的开发套件。
- 开发套件有快捷菜单,通过此菜单可以为项目启用或禁用某个开发套件。
开发套件的Build设置界面
- 界面说明:每个开发套件都有Build和Run两个设置界面,此处重点关注Build设置界面。
- Shadow build复选框:位置:位于Build设置界面上。功能:勾选后,构建项目时将在项目的同级目录下创建一个包含套件和构建模式信息的输出文件夹;不勾选则默认在项目目录下创建debug和release文件夹用于存放输出文件。对于一般示例项目,不需要勾选Shadow build复选框;仅在需要输出多种构建版本的输出文件时才勾选。
构建的概念
构建项目是根据构建系统(如qmake或CMake)的配置,对项目内的源程序文件进行编译和连接,生成可执行文件或库的完整过程。
- 与编译的区别:编译是对单个文件的操作,而构建是对整个项目的操作,包含编译过程。
Build设置界面的其他选项
- 对于项目的Build和Run设置界面的其他选项,一般采用默认设置即可,无需特别调整。
当你在Qt Creator中开发一个项目时,首先需要选择一个开发套件,比如Qt 6.2.3 MinGW 64-bit。
选择后,你可以通过Build设置界面来配置构建项目的相关选项。
在Build设置界面上,你会看到Shadow build复选框。如果你正在开发一个简单的示例项目,并且不需要输出多种构建版本的输出文件,那么你可以不勾选这个复选框。这样Qt Creator会在项目目录下默认创建debug和release文件夹来存放编译后的文件。
如果你需要为同一个项目生成多种构建版本(比如不同的编译器或不同的构建配置),那么可以勾选Shadow build复选框。这样 Qt Creator会在项目的同级目录下创建一个包含套件和构建模式信息的输出文件夹,可以更好地管理和区分不同版本的构建输出。
调试
构建模式选择
- 构建模式概述:项目构建前需设置构建模式,共有三种:Debug(调试版本,带调试信息,不优化)Release(发行版本,无调试信息,优化运行速度)Profile(性能平衡版本,可用于调试)。
- 构建模式选择:根据需求选择合适的构建模式进行项目构建。
项目构建与运行
- 构建项目:选择好构建模式后,进行项目构建。
- 运行程序:构建成功后,运行程序,界面将显示设计好的内容。
程序调试
- 调试模式要求:要进行程序调试,必须以Debug或Profile模式构建项目,并以调试方式运行。
- 调试方法:在代码行号左侧点击鼠标设置或取消断点,Qt Creator中的程序单步调试方法与一般IDE软件类似。
Shadow Build功能
- 功能概述:勾选Shadow Build复选框后,用Debug和Release模式分别构建项目,将在项目同级目录下生成对应版本的文件夹以保存构建后的文件。
Qt Creator使用技巧
文本编辑器快捷键
| 功能 | 快捷键 |
|---|---|
| 跳转到定义 | F2 |
| 跳转到声明 | Shift + F2 |
| 跳转到实现 | Ctrl + Click |
| 显示上下文菜单(快速修复) | Ctrl + . |
| 重命名符号 | Ctrl + Shift + R |
| 撤销 | Ctrl + Z |
| 重做 | Ctrl + Shift + Z |
| 剪切 | Ctrl + X |
| 复制 | Ctrl + C |
| 粘贴 | Ctrl + V |
| 全选 | Ctrl + A |
| 注释/取消注释当前行 | Ctrl + / |
| 查找 | Ctrl + F |
| 替换 | Ctrl + H |
| 在项目中查找 | Ctrl + Shift + F |
| 在项目中替换 | Ctrl + Shift + H |
| 切换到编辑器 | Ctrl + 1 |
| 切换到设计器 | Ctrl + 2 |
| 切换到侧边栏 | Ctrl + 3 |
| 显示文件资源管理器 | Ctrl + Shift + E |
| 构建项目 | Ctrl + B |
| 运行项目 | Ctrl + R |
| 调试项目 | Ctrl + Shift + R |
| 显示命令面板 | Ctrl + Shift + P |
| 显示帮助 | F1 |
| 新建文件或项目 | Ctrl + Shift + N |
| 保存所有文件 | Ctrl + Shift + S |
项目管理
| 功能 | 描述 | 操作 |
|---|---|---|
| 新建项目 | 创建新的 Qt 项目,包括应用程序和库等 | 文件 > 新建文件或项目 |
| 打开项目 | 打开已有的 Qt 项目 | 文件 > 打开文件或项目 |
| 添加文件 | 向项目中添加现有文件或新文件 | 右键项目 > 添加现有文件或新建文件 |
| 删除文件 | 从项目中移除不需要的文件 | 右键文件 > 删除 |
| 修改项目设置 | 配置项目的构建和运行选项 | 项目 > 项目设置 |
| 构建项目 | 编译项目生成可执行文件或库 | 构建 > 构建项目 |
| 运行项目 | 启动已构建的项目并查看输出 | 运行 > 运行项目 |
| 调试项目 | 进入调试模式,检查代码运行情况 | 运行 > 调试项目 |
| 版本控制集成 | 集成 Git 等版本控制工具 | 工具栏 > 版本控制 |
| 管理构建配置 | 切换和配置不同的构建环境(Debug/Release) | 项目 > 构建和运行 |
| 查看项目结构 | 浏览和管理项目中的文件和文件夹结构 | 项目 > 项目视图 |
| 清理项目 | 删除构建生成的临时文件 | 构建 > 清理项目 |