1. Qt 背景介绍

1.1 什么是 Qt

Qt 是⼀个 跨平台的 C++ 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模
式,开发者可以通过简单的拖拽和组合来实现复杂的应⽤程序,同时也可以使⽤ C++ 语⾔进⾏⾼级开发
在这里插入图片描述
图形⽤⼾界⾯ :指采⽤图形⽅式显⽰的计算机操作⽤⼾界⾯,是计算机与其使⽤者之间的对话接⼝,
是计算机系统的重要组成部分。如下分别是:Android ⼿机图形⽤⼾界⾯ 和 IOS ⼿机图形⽤⼾界⾯。
在这里插入图片描述

1.2 Qt 的发展史

1991 年 Qt 最早由奇趣科技开发;
1996 年 进⼊商业领域,它也是⽬前流⾏的 Linux 桌⾯环境 KDE 的基础;
2008 年 奇趣科技被诺基亚公司收购,Qt 成为诺基亚旗下的编程⼯具;
2012 年 Qt ⼜被 Digia 公司收购;
2014 年 4 ⽉ 跨平台的集成开发环境 Qt Creator3.1.0 发布,同年 5 ⽉ 20 ⽇发布了 Qt 5.3 正式版,⾄此 Qt 实现了对 IOS、Android、Embedded 等各平台的全⾯⽀持。

1.3 Qt ⽀持的平台

• Windows ‒ XP、Vista、Win7、Win8、Win2008、Win10
• Unix/X11 ‒ Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS、和其他很多 X11 平台
• Macintosh ‒ Mac OS X
• Embedded ‒ 有帧缓冲⽀持的嵌⼊式 Linux 平台,Windows CE
• Android

1.4 Qt 版本

⽬前最新的版本是 Qt 6. 但是相对来说 Qt 6 和 Qt 5 之间的核⼼功能区别不⼤. 并且企业中也仍然有⼤量的项⽬在使⽤ Qt 5.
因此咱们仍然使⽤ Qt 5 版本来进⾏介绍.
另外 Qt 在发布的时候还提供了两种许可证.
• 商业许可: 开发者以商业⽬的使⽤Qt框架进⾏开发和发布软件的许可,开发者需要购买商业许可并按照相关规定使⽤Qt框架。商业许可提供了更多的功能和服务,适合于商业软件开发。
• 开源许可: 开发者以⾮商业⽬的使⽤Qt框架进⾏开发和发布软件的许可,开发者可以免费使⽤Qt框架,但需要遵守开源许可协议的要求,如在软件中包含Qt许可协议的声明等。
在这里插入图片描述

1.5 Qt 的优点

• 跨平台,⼏乎⽀持所有的平台;
• 接⼝简单,容易上⼿,学习 QT 框架对学习其他框架有参考意义。
• ⼀定程度上简化了内存回收机制;(半自动的垃圾回收,能够简化内存释放,也尽可能小的影响程序的运行效率)
• 开发效率⾼,能够快速的构建应⽤程序。
• 有很好的社区氛围,市场份额在缓慢上升。
• 可以进⾏嵌⼊式开发
在这里插入图片描述

拓展

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 Qt 的应⽤场景

• 桌⾯应⽤程序
Qt 能够创建各种类型的桌⾯应⽤程序,包括⽂件管理器、媒体播放器、绘图程序等。Qt 应⽤程序⽀持多种操作系统,可以运⾏在 Windows、Linux、macOS 等桌⾯操作系统上。
• 移动应⽤程序
Qt ⽀持 Android 和 IOS 移动操作系统,为应⽤程序提供了强⼤的跨平台能⼒。可以使⽤ Qt 构建各种移动应⽤程序,例如社交应⽤、游戏、娱乐等。
• 嵌⼊式系统
Qt 在嵌⼊式领域应⽤⾮常⼴泛,它可以构建⾯向各种设备的图形应⽤程序,在机顶盒、⻋载娱乐系统、安防监控设备等领域具有⼴泛的应⽤。

1.7 Qt 的成功案例

Linux 桌⾯环境 KDE
在这里插入图片描述
WPS Office 办公软件
在这里插入图片描述

Skype ⽹络电话。Skype是⼀款即时通讯软件,其具备 IM 所需的功能,⽐如视频聊天、多⼈语⾳会议、多⼈聊天、传送⽂件、⽂字聊天等功能。它可以⾼清晰与其他⽤⼾语⾳对话,也可以拨打国内国
际电话,⽆论固定电话、⼿机均可直接拨打,并且可以实现呼叫转移、短信发送等功能。
在这里插入图片描述
Google Earth ⾕歌地图
在这里插入图片描述
VLC 多媒体播放器
在这里插入图片描述
VirtualBox 虚拟机软件(VirtualBox号称是最强的免费虚拟机软件)
在这里插入图片描述

1.8 Qt 的发展前景及就业分析

Qt 是⼀个强⼤且⼴泛应⽤于跨平台软件开发的框架。它提供了丰富的⼯具和库,可⽤于开发⾼质量、⾼效率的图形⽤⼾界⾯(GUI)应⽤程序。并且可以在 Windows、linux、macOS 等多种操作系统上运⾏。随着⾏业的发展,Qt的重要性也逐渐体现出来,下⾯从⾏业发展⽅向、就业⽅⾯的发展前景以及就业薪资分析 Qt 的发展前景。
⾏业发展⽅向
• 物联⽹(IoT)和嵌⼊式系统的发展:
在当下的嵌⼊式和物联⽹⾏业中,Qt 的作⽤逐渐得到了体现,因为可以⽤它来开发具有 GUI 界⾯的嵌⼊式应⽤程序,这对于智能家居、汽⻋以及医疗设备等领域来说,具有⾮常重要的作⽤。
• ⾃动驾驶和智能交通领域:
现在很多的汽⻋都引⼊了⾃动驾驶的技术,⽽ Qt 在其中也有着⼴泛的应⽤,它可以开发⻋载嵌⼊式系统和⽤⼾界⾯程序。随着未来⾃动驾驶技术的发展,Qt 在这⽅⾯的需求也会不断地增多。
• 游戏开发:
Qt 有⼀些⾮常重要的功能模块,例如 Qt 3D Studio,可以应⽤于游戏开发。未来游戏⾏业的持续发展,Qt在游戏⾏业的发展将会越来越多。
就业⽅⾯的发展前景:
⼴泛的就业机会:
Qt 在各个⾏业的应⽤逐渐⼴泛起来,对于掌握 Qt 开发能⼒的⼈员需求也在不断增加,因此在就业⽅⾯,相对⽐于其他⾏业来说,Qt 就业⾯更⼴,选择性更多。
⾼薪⽔和职业发展机会:
Qt 作为⼀项专业技能,掌握此项技术的开发者获得的薪资报酬也是⾮常可观的,具有更多的职业发展机会。总之就是,如果掌握了 Qt 开发技术,未来的发展前景还是⾮常不错的。

2. 搭建 Qt 开发环境

2.1 Qt 的开发⼯具概述

Qt ⽀持多种开发⼯具,其中⽐较常⽤的开发⼯具有:Qt Creator、Visual Studio、Eclipse.
1、Qt Creator
Qt Creator 是⼀个轻量级的跨平台集成开发环境(IDE),专为使⽤ Qt 框架进⾏应⽤程序开发⽽设计。
它是⼀个功能强⼤、易于使⽤、快速且⾼效的⼯具,被⼴泛⽤于编写各种类型的应⽤程序,如桌⾯应⽤程序、移动应⽤程序和嵌⼊式系统等。
Qt Creator 提供了⼀个可视化的界⾯设计器和代码编辑器,可以帮助开发者更快捷地创建复杂的⽤⼾界⾯和处理各种事件。
它还包含了调试⼯具、版本控制⼯具、⾃动完成和智能提⽰等功能,以及⽀持多语⾔和跨平台的开发环境。
Qt Creator 的主要特点包括:
• 紧密集成的 Qt 框架:Qt Creator 专⻔为 Qt 开发⽽设计,因此它与 Qt 框架集成得⾮常紧密,使开发者可以更容易地管理和部署他们的应⽤程序。
• 强⼤的编辑器:Qt Creator 具有⼀些先进的编辑器功能,如语法⾼亮、代码折叠、智能提⽰、⾃动完成和代码重构。
• 集成的调试器:Qt Creator 内置了调试器,允许开发⼈员在代码中设置断点以及检查变量、堆栈和调⽤树等信息。
• ⾼效的构建系统:Qt Creator 提供了⼀个⾼效的构建系统,可以⾃动构建和部署应⽤程序,同时⽀持使⽤不同的编译器和平台。
• 可视化界⾯设计器:Qt Creator 具有⼀个可视化界⾯设计器,它允许开发⼈员在没有编写代码的情
况下创建复杂的⽤⼾界⾯。
• 多语⾔⽀持:Qt Creator ⽀持多种编程语⾔,包括 C++、QML、JavaScript 等。
总⽽⾔之,Qt Creator 是⼀个功能⻬全、易于使⽤且⾼效的跨平台 IDE,适⽤于各种类型的应⽤程序开发,特别是那些使⽤ Qt 框架的开发者。
2、Visual Studio
Visual Studio 是由微软公司开发的集成开发环境(IDE)。它可以⽤来开发多种类型的应⽤程序。包括Windows 桌⾯应⽤程序、Web应⽤程序、移动应⽤程序、游戏等。Visual Studio 提供了丰富的开发⼯具和功能,包括代码编辑器、调试器、⾃动完成、代码重构、版本控制等等。它⽀持多种编程语⾔,如:C++、C#、Visual Basic、F#、Python等。Visual Studio 还可以与其他开发⼯具和服务集成,如 Azure 云服务、GitHub、Jenkins等。
Visual Studio 具有以下⼀些主要特点:
• 多语⾔⽀持:Visual Studio ⽀持多种编程语⾔,包括 C++、C#、Visual Basic、F#、Python、
JavaScript 等;
• 丰富的⼯具集:VS 提供了各种开发⼯具,包括代码编辑器、调试器、代码分析⼯具等,以提⾼开发⼈员的效率;
• 可视化设计:VS提供了可视化的设计⼯具,如窗体设计器、WPF 设计器等,使开发⼈员可以直观
地设计⽤⼾界⾯;
• 跨平台开发:VS ⽀持跨平台开发,可以开发适⽤于 Windows、Linux 和 macOS 等多个平台的应⽤程序;
• 集成的调试器:VS 集成了强⼤的调试器,可以进⾏代码的单步调试、断点调试等操作来帮助开发
⼈员查找和修复错误;
• 丰富的扩展性:VS 可以通过安装扩展来扩展其功能,开发⼈员可以根据⾃⼰的需求选择并安装适
合的扩展。
3、Eclipse
Eclipse 是著名的跨平台的⾃由集成开发环境(IDE)。最初主要⽤来 Java 语⾔开发,但是⽬前亦有⼈
通过插件使其作为其他计算机语⾔⽐如 C++ 和 Python 的开发⼯具。Eclipse 的本⾝只是⼀个框架平
台,但是众多插件的⽀持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。许多软件
开发商以 Eclipse 为框架开发⾃⼰的 IDE。Qt 框架可以与 Eclipse 集成,使开发者可以使⽤ Eclipse 的
强⼤功能来开发 Qt 应⽤程序。

2.2 Qt SDK 的下载和安装

在这里插入图片描述
在这里插入图片描述

2.2.1 Qt SDK 的下载

Qt 下载官⽹:https://download.qt.io/archive/qt/
国内清华源:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/
进⼊官⽹,按如下图⽰进⾏相应的系统版本下载即可。
1、打开官⽹链接,进⼊如下图⽰界⾯;
在这里插入图片描述
2、选择需要下载的版本;(本课件以5.14版本为例,所选具体版本为:5.14.2)
在这里插入图片描述

3、选择需要下载的版本;

在这里插入图片描述
4、选择Windows桌⾯应⽤程序;
在这里插入图片描述

2.2.2 Qt SDK 的安装

1**、找到下载的⽂件并双击;注意:在双击之前先断⽹,否则需要我们注册 Qt 账号登录后才能进⼊下
⼀步安装;**

在这里插入图片描述
在这里插入图片描述
2、双击之后进⼊如下界⾯:
在这里插入图片描述
3、选择安装路径时不能出现中⽂路径,否则即使安装上也⽆法使⽤;
在这里插入图片描述
4、选择安装组件;这⾥我们安装的是 Qt Creator。如果电脑磁盘空间允许,建议全选以便后续使⽤,如果空间不允许,请看第5步;
在这里插入图片描述
5、选择部分组件;说明:其他未安装的组件在使⽤时可以另⾏添加;
在这里插入图片描述
在这里插入图片描述
6、同意安装协议;
在这里插入图片描述
7、下⼀步;
在这里插入图片描述
8、点击 “安装” 进⼊安装界⾯
在这里插入图片描述
9、安装界⾯如下:
在这里插入图片描述
10、点击 “完成” 按钮完成安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 验证 Qt SDK 安装是否成功

1、双击打开 Qt Creator ⼯具,并进⼊到 “欢迎模式” 下的 “⽰例” 界⾯;
在这里插入图片描述
2、在 “⽰例” 中任选其中⼀个,单击打开该⽰例。在单击之后会弹出⼀个窗⼝,关闭即可;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果能构建并运⾏,说明安装⽆误。运⾏结果如下图:
在这里插入图片描述

2.4 Qt 环境变量配置

1、找到Qt的安装路径,复制 “bin” 路径;
在这里插入图片描述
2、“此电脑” ------> ⿏标右键, “属性” ------> “⾼级系统设置” ------> “环境变量”
在这里插入图片描述
3、“新建” ------> 填⼊ “bin” 路径 ------> “确定” ;
在这里插入图片描述
4、注意:在关掉所有窗⼝时,⼀定要点击 “确定” ,否则上述配置⽆效。
为什么要设置环境变量
环境变量是在操作系统中⼀个具有特定名字的对象,它包含了⼀个或者多个应⽤程序将要使
⽤到的信息。
例如Windows 和 DOS 操作系统中的 path 环境变量,当要求系统运⾏⼀个程序⽽没有告诉它
程序所在的完整路径时,系统除了在当前⽬录下⾯寻找此程序外,还会到 path 中指定的路径
去找。
在 Windows 上设置 Qt 的环境变量是为了能够在命令⾏或其他应⽤程序中直接访问 Qt 相关
的命令和⼯具。

3. 认识 Qt Creator

3.1 Qt Creator 概览

从 开始菜单 或者 快捷⽅式 打开 Qt Creator 集成开发环境,启动之后看到类似下⾯的界⾯:
在这里插入图片描述

①:菜单栏。菜单栏⼀共有 8 个菜单选项,包含了常⽤的功能菜单:
件 包含了新建、打开、关闭项⽬和⽂件、打印和退出等基本功能
编辑 包含了撤销、剪切、复制、查找和选择编码等功能
构建 包含构建和运⾏项⽬等相关功能。
调试 包含调试运⾏项⽬等相关功能。
Analyze 包含 QML 分析器、Valgrind 内存和功能分析器等相关功能。
⼯具 提供了快速定位菜单、外部⼯具菜单等。这⾥的选项菜单中包含了 Qt Creator 各个⽅⾯的设置选
项:环境设置、⽂本编辑器设置、帮助设置、构建和运⾏设置、调试器设置和版本控制设置等。
提供了快速定位菜单、外部⼯具菜单等。这⾥的选项菜单中包含了 Qt Creator 各个⽅⾯的设置选
项:环境设置、⽂本编辑器设置、帮助设置、构建和运⾏设置、调试器设置和版本控制设置等。
②:模式选择;
欢迎模式 主要提供了⼀些功能的快捷⼊⼝,如打开帮助教程、打开⽰例程序、打开项⽬、新建项⽬、快速打
开以前的项⽬和会话、联⽹查看 Qt 官⽅论坛和博客等。⽰例⻚⾯显⽰了 Qt ⾃带的⼤量⽰例程序,
并提供了搜索栏从⽽实现快速查找;教程⻚⾯提供了⼀些视频教程资源,但是是英⽂的。
编辑模式 主要⽤来查看和编辑程序代码,管理项⽬⽂件。Qt Creator 中的编辑器具有关键字特殊颜⾊显⽰、
代码⾃动补全、声明定义间快捷切换、函数原型提⽰、F1 键快速打开相关帮助和全项⽬中进⾏查找
等功能。也可以在 "⼯具---->选项 " 菜单中对编辑器进⾏设置。
设计模式 整合了 Qt Designer 的功能。可以设计图形界⾯,进⾏部件属性设置、信号和槽设置、布局设置等
操作。
调试模式 ⽀持设置断点、单步调试和远程调试等功能,包含局部变量和监视器、断点、线程以及快照等查看
窗⼝。
项⽬模式
包含对特定项⽬的构建设置、运⾏设置、编辑器设置、代码⻛格设置和依赖关系等⻚⾯。构建设置
中可以对项⽬的版本、使⽤的Qt版本和编译步骤进⾏设置;编辑器设置中可以设置⽂件的默认编
码;在代码⻛格设置中可以设置⾃⼰的代码⻛格。
帮助模式 在帮助模式中将 Qt 助⼿整合了进来,包含⽬录、索引、查找和书签等⼏个导航模式,可以在帮助中
查看 Qt 和 Qt Creator 的各⽅⾯信息。
③:构建套件选择器。构建套件选择器包含了⽬标选择器(Target selector)、运⾏按钮(Run)、调
试按钮(Debug)和构建按钮(Building)四个图标。
⽬标选择器 ⽬标选择器⽤来选择要构建哪个项⽬、使⽤哪个 Qt 库、这对于多个 Qt 库的项⽬很有⽤。还可以
选择编译项⽬的 debug 版本或是 release 版本。
运⾏按钮 运⾏按钮可以实现项⽬的构建和运⾏;
调试按钮 运⾏按钮可以实现项⽬的调试;
构建按钮 构建按钮完成项⽬的构建。
④:欢迎模式下的窗⼝⼯作⽅式。
Project ⽤来新建⼯程、打开⼯程
⽰例 Qt 官⽅的⼀些⽰例
教程 Qt 官⽅教程
⑤:定位器。使⽤定位器来快速定位项⽬、⽂件、类、⽅法、帮助⽂档以及⽂件系统。可以使⽤过滤
器来更加准确地定位要查找的结果。
⑥:输出窗格。输出窗格包含了问题、搜索结果(Search Results)、应⽤程序输出、编译输出、
Debugger Console、概要信息、测试结果(Test Results)7个选项,它们分别对应⼀个输出窗⼝,响
应的快捷键依次是 Alt+数字1~7。
问题 问题窗⼝显⽰程序编译时的错误和警告信息;
Search Results 搜索结果窗⼝显⽰执⾏了搜索操作后的结果信息;
应⽤程序输出 应⽤程序窗⼝显⽰应⽤程序运⾏过程中输出的所有信息;
编译输出 编译输出窗⼝显⽰程序编译过程输出的相关信息
⑦:会话记录;可以对会话进⾏管理,包括 Clone。如果没打开⼯程,则显⽰的是最后⼀次打开的
(会话)⼯程,否则,显⽰当前的会话(⼯程)。
⑧:新建项⽬;
⑨:打开已有项⽬;

3.2 使⽤ Qt Creator 新建项⽬

3.2.1 新建项⽬

打开 Qt Creator ,在菜单栏中选中: “⽂件” --------> “新建⽂件或项⽬” ;或者使⽤快捷键:Ctrl +
n;或者直接点击:“new”;
在这里插入图片描述
在欢迎模式下,直接点击 New,如下图⽰:
在这里插入图片描述

3.2.2 选择项⽬模板

弹出如下对话框:
在这里插入图片描述
新建项⽬对话框⾥有五类项⽬模板:
项⽬模板 说明
Application Qt 应⽤程序,包括普通窗体程序和 QtQuick 程序
Library 可以创建动态库、静态库以及 Qt Quick 扩展插件、QtCreator ⾃⾝插件
其他项⽬ 可以创建单元测试项⽬、Qt4 设计师⾃定义控件、⼦⽬录项⽬等
Non-Qt-Project ⾮ Qt 项⽬。可以创建纯 C 或纯 C++ 项⽬
Import Project 导⼊项⽬。从版本控制系统管理的软件项⽬导⼊旧的项⽬

常⽤的只有第⼀类 Application,选择它,在右侧会看到 Qt 应⽤程序的五个⼦模板:
• Qt Widgets Application:普通窗体模板,传统基于部件的窗体界⾯程序。
• Qt Console Application:Qt 控制台应⽤程序。因为 Qt 主要⽤于图形界⾯设计,这个控制台项⽬
模板基本不⽤。
• Qt for Python:在Python下⽤ LGPL 的许可来开发闭源 Qt 软件。
• Qt Quick Application: Qt 提供的⼀种⾼级⽤⼾界⾯技术,使⽤它可以⽅便快速的为移动以及嵌⼊
式设备开发流畅美观的⽤⼾界⾯。Qt Quick 模块是开发 QML 应⽤的标准库,提供了使⽤ QML 创建
⽤⼾界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒⼦效果以及着⾊效果等。

选择不同的项⽬模板, Qt Creator 就会在后续项⽬创建好了之后⽣成不同的基础代码.

3.2.3 选择项⽬路径

给Qt项⽬命名及选择保存项⽬的路径;
在这里插入图片描述

3.2.4 选择构建系统

选择 Qt 项⽬的构建系统,使⽤默认的 “qmake” 即可。
在这里插入图片描述
Qt 中的构建⼯具有三种可供选择,分别是:qmake、CMake、Qbs,下⾯依次介绍。
• qmake: qmake 是⼀个构建⼯具(build tool),⽤于⾃动⽣成 makefile ⽂件。qmake ⽀持跨平
台构建。qmake 编辑的是⼀个后缀名为 .pro 的⽂件。
• CMake:CMake 是⼀个跨平台的构建⼯具。CMake 本⾝不是⼀个编译器,其实就是⽣成⼀个让编
译器能读懂编译流程的⽂件⼯具。让 CMake ⾃动⽣成构建系统,例如 Makefile 和 Visual Studio
项⽬⽂件。CMake 是⼀个第三⽅⼯具,有⾃⼰的⽂档。
• Qbs:Qbs(Qt Build Suite:Qt构建套件)同 qmake、CMake ⼀样都是构建⼯具。Qbs 号称是新
⼀代的构建⼯具,⽐ qmake 编译速度更快。Qbs 没有绑定 Qt 版本,它从项⽬⽂件的⾼级项⽬描述
中⽣成⼀个正确的依赖表。⽽传统的 MakeFile ⽣成⼯具如 qmake 和 CMake ,其在⽣成 MakeFile
⽂件后将实际的命令交给 Make ⼯具去执⾏。
Qt 官⽅声明,因市场原因,弃⽤ Qbs 。对于 Qt ⽤⼾来说,qmake 是当前使⽤最⼴泛的构建⼯具,
CMake 其次

3.2.5 填写类信息设置界⾯

在这里插入图片描述
对于基类的选择,⽬前有三种基类
基类 说明
QMainWindo
w
主窗⼝类,⼀般⽤于较为复杂的应⽤程序,除了中央客⼾区界⾯,还包括菜单栏、⼯具栏、
状态栏以及多个可停靠的⼯具对话框等
QWidget 最简单、最基本的窗体程序,⾥⾯可以放置多个控件实现程序功能
QDialog 基于对话框的程序,对话框⼀般⽤于弹窗,也可以⽤于主界⾯显⽰。对话框是从QWidget继承⽽来的,并丰富了⼀些功能,如模态显⽰和返回值等
上述三个类之间的关系如下图
在这里插入图片描述

3.2.6 选择语⾔和翻译⽂件

点击 “下⼀步” 进⼊如下界⾯:
此处选择的语⾔是 “汉语”, “英语” 这样的语⾔. ⽽不是 “编程语⾔”.
在这里插入图片描述
由于我们暂时不考虑国际化问题, 直接下⼀步即可.

3.2.7 选择 Qt 套件

默认只有第⼀个 “Desktop Qt 5.14.2 MinGW 64-bit”,如果安装配置了多个 Qt 套件,就可以都选上。
Qt 套件是指 Qt 程序从编译链接到运⾏环境的全部⼯具和 Qt 类库的集合,对于 MinGW 版本 Qt 程序⽣
成和调试,⾄少需要 MinGW 中的编译器 g++(⾃动调⽤链接器)、g++ 配套的基础库、调试器 gdb 还
有使⽤ MinGW 环境编译⽽成的 Qt 类库⾃⾝。默认情况下,在上⾯ Kit Selection ⾥选中全部套件。
在这里插入图片描述

3.2.8 选择版本控制系统

点击 “下⼀步” 进⼊ 项⽬管理界⾯;在项⽬管理界⾯可以设置作为⼦项⽬,以及加⼊版本控制系统管
理。这两个功能暂时⽤不到,都⽤默认的 ,然后点击 “完成” 。
在这里插入图片描述

如果想把代码提交到码云或者 github, 可以在此处选择 git 作为版本控制系统.

实践

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.9 最终效果

通过上述 8 个步骤, 完成了项⽬的创建.
⼤家千万不要觉得⿇烦. 事实上在⼤家熟练了之后, 创建⼀个项⽬花的时间不会超过 10 秒钟.
项⽬创建完成之后,Qt Creator 会直接进⼊代码编辑模式,可以看到类似下图界⾯:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 认识 Qt Creator 界⾯

3.3.1 左边栏

在这里插入图片描述
在编辑模式下,左边竖排的两个窗⼝叫做 “边栏” 。① 是项⽬⽂件管理窗⼝,② 是打开⽂件列表窗⼝。
在 QtCreator 菜单 “控件” -------> “Show Left Sidebar”,或者使⽤快捷键:“Alt + 0” 可以控制边栏的
显⽰和隐藏。
边栏⾥的窗⼝数⽬可以增加,边栏⼦窗⼝标题栏有⼀排⼩按钮,最右边的是关闭按钮,倒数第⼆个是
增加分栏按钮,可以添加多个边栏⼦窗⼝。
在这里插入图片描述
边栏⼦窗⼝标题栏第⼀个控件是组合框,可以选择该⼦窗⼝的功能视图类型,⽬前可以选择 8 个视图
类型:
在这里插入图片描述
视图类型 说明
项⽬ 即项⽬⽂件管理视图,可以选择项⽬⾥的⽂件进⾏编辑,包括 pro ⽂件也可以⼿动编辑。
打开⽂档 当前已经打开的⽂件列表,⽂件名右边如果有 * 号,是该⽂件被修改了但尚未保存。
书签 右击代码编辑器⾏号位置,看到 “切换书签”,可以给代码⾏添加书签,⽅便跳转到该位
置。
⽂件系统 相当于系统⾥的⽂件资源管理器,可以查看项⽬⽂件夹在磁盘⾥的实际⽂件列表。
类视图 可以查看项⽬⾥包含的类及相应源代码⽂件⾥的成员函数、成员变量。
Git Branches 查看当前分⽀
⼤纲 编辑器所显⽰的当前⽂件的⼤纲列表,如名字空间、类名、成员函数、成员变量等。
Tests 测试
类型层次 当前项⽬包含的类及其基类、派⽣类列表。
Include
Hierarchy
包含视图,显⽰当前项⽬⾥ .h 、.cpp 以及 Qt 类库头⽂件之间的包含关系。

3.3.2 代码编辑区

在这里插入图片描述
①和②:导航按钮 “返回” 和 “前进”,这与⽹⻚浏览器的前进和后退按钮类似,可以在之前浏览的多个
代码⽂件或⼀个代码⽂件⾥多个位置之间快速切换。
③:标识当前显⽰的⽂件是只读还是可写,⼀般都是可写的。
④:⽂件类型图标,当前显⽰⽂件的类型,这个控件其实是⼀个菜单按钮,点击可以弹出丰富的⽂件
处理功能菜单。
⑤:打开的⽂件名,可以在多个打开的⽂件之间选择切换,与边栏的 “打开⽂档” 视图是对应的。
⑥:关闭当前显⽰的⽂档。
⑦:为当前显⽰的⽂件添加额外的C++预处理指令,⼀般⽤不着。
⑧:选择符号,可以在当前显⽰的⽂件⾥多个函数、类、成员变量等之前快速切换,与边栏"⼤纲"视
图是对应的。
⑨:编辑区光标的⾏号和列号。
⑩:代码编辑区分栏,可以增加多个编辑器窗⼝,显⽰多个打开的⽂档或显⽰较⼤源码⽂件的多个位
置。
⾏⾸区:主要⽤来显⽰代码⾏号,以及调试断点标志和代码书签标志。右击⾏⾸区可以弹出右键菜
单,菜单⾥可以切换书签、编辑书签以及设置或取消断点。
同⼀⾏是既可以打断点也可以设置书签的,⼆者不冲突,其实它们根本就没关系。单击⾏号前⾯的浅
灰⾊空⽩区可以直接打断点,再次单击可以取消断点,另外也可以⽤快捷键 F9 设置或取消断点。代码
书签⼀般⽤右键菜单来设置,也可以⽤快捷键 Ctrl+M 设置或取消书签。
编辑区:写代码的区域。

3.3.3 UI设计界⾯

双击 widget.ui ⽂件,Qt Creator 会⾃动进⼊设计模式,可以对图形界⾯进⾏可视化编辑:
在这里插入图片描述
①:组件选择窗⼝。组件选择窗⼝分为多个组,如 Layouts、Buttons、Display Widgets 等,界⾯设计的常⻅组件都可以在组件选择窗⼝中找到。
②:UI 设计窗⼝。如果要将某个组件放置到该窗⼝上时,从组件选择窗⼝上拖放⼀个组件到窗体上即可。
③:动作编辑窗⼝。动作编辑窗⼝包括 Action Editor 以及 Signals 和 Slots 编辑器。 Action Editor 主要是⽤来新建 Action,并且通过拖拽的动作,将新建好的 Action 添加到菜单栏和⼯具栏上;Signals 和 Slots 编辑器⽤于可视化地进⾏信号与槽的关联。
④:对象浏览窗⼝。⽤树状视图显⽰窗体上各组件之间的布局包含关系,视图有两列,显⽰每个组件的对象名称(ObjectName)和类名称。
⑤:属性设置窗⼝。显⽰某个选中的组件或窗体的各种属性及其取值,可以在属性设置窗⼝⾥修改这些属性的值。

3.3.4 构建区

在这里插入图片描述
左下⻆⼀共有四个按钮,下⾯分别介绍⼀下:
• 第⼀个按钮是选择构建项⽬使⽤的 Qt 套件和构建⽬标程序的类型(Debug 或 Release)。
对于第⼀个按钮,默认的是Debug,构建的是 Debug 类型的⽬标程序。如果需要构建 Release 版⽬标
程序,点开左下⻆第⼀个按钮:
在这里插入图片描述
这⾥有三种构建模式:
模式 说明
Debug 以 “-g” 模式编译,带着符号信息,优点是便于调试
Profile profile 则是在 “Debug” 和 “Release” 之间取⼀个平衡,兼顾性能和调试,可以类似的看做是性能更
优⼜⽅便调试的版本。
Release “Release” 是经过优化之后,性能⽐ “Debug” 更上⼀个档次
上图是针对项⽬只⽤到单⼀ Qt 套件的,如果之前配置了多个 Qt 套件,看到的类似下图:
在这里插入图片描述
如果项⽬配置了多个可⽤的 Qt 套件,点开左下⻆第⼀个按钮后,会看到各个套件以及构建类型,如果
要切换 Qt 套件或构建类型,直接选中相应条⽬,然后点击运⾏按钮就⾏了。如果构建和运⾏时没出
错,就会显⽰出构建好的⽬标程序界⾯。
• 第⼆个是运⾏按钮,快捷键是 Ctrl+R,如果还没构建项⽬或刚修改了代码,直接点击运⾏的话,
QtCreator 会⾃动构建⽣成新的⽬标程序并运⾏。
• 第三个是调试按钮,快捷键是 F5。调试程序之前,QtCreator 会⾃动构建⽣成最新的⽬标程序,并进⼊调试模式。
• 第四个是构建按钮,快捷键是 Ctrl+B,只构建最新的⽬标程序,但不运⾏。

实践认识

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Qt Hello World 程序

4.1 使⽤ “按钮” 实现

4.1.1 纯代码⽅式实现

在这里插入图片描述
实现效果如下图:
在这里插入图片描述

4.1.2 可视化操作实现

1)双击:" widget.ui " ⽂件;
在这里插入图片描述
(2)拖拽控件⾄ ui 界⾯窗⼝并修改内容;
在这里插入图片描述
(3)构建并运⾏,效果如下所⽰:
在这里插入图片描述

按钮实践

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);//(按钮,信号,关联到的槽函数,具体函数)
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handleClick()
{
    //当按钮被点击后,就把按钮中的文本,进行切换,
    if(ui->pushButton->text()==QString("hello world"))
    {
           ui->pushButton->setText("HELLO QT");
    }
    else {
           ui->pushButton->setText("hello world");
    }


}


(2)

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    myButton = new QPushButton(this);
    myButton->setText("hello world");
    connect(myButton,&QPushButton::clicked,this,&Widget::handleClick);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handleClick()
{
    if(myButton->text()==QString("hello world"))
    {
        myButton->setText("hello qt");
    }
    else
    {
         myButton->setText("hello world");
    }
}


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实践笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 使⽤ “标签” 实现

4.2.1 纯代码⽅式实现

在这里插入图片描述
实现效果:
在这里插入图片描述

实践笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include<QLabel>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //更推荐这种在堆上创建的方式
    QLabel*label = new QLabel(this);
    //QLabel label;
    label->setText("Hello World!");
}

Widget::~Widget()
{
    delete ui;
}

在这里插入图片描述

4.2.2 可视化操作实现

(1)双击:" widget.ui " ⽂件;

在这里插入图片描述
(2)拖拽 “标签” ⾄ UI 设计界⾯中,并双击修改标签内容;
在这里插入图片描述
(3)实现效果如下图所⽰:

在这里插入图片描述

4.3 使用编辑框来实现

1.使用编辑框来实现
在这里插入图片描述

2、纯代码实现

#include "widget.h"
#include "ui_widget.h"
#include<QLineEdit>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLineEdit *edit = new QLineEdit(this);
    edit->setText("hello world");
}

Widget::~Widget()
{
    delete ui;
}


在这里插入图片描述

5. 项⽬⽂件解析

5.1 .pro ⽂件解析

⼯程新建好之后,在⼯程⽬录列表中有⼀个后缀为 “.pro” 的⽂件, “.pro” ⽂件就是⼯程⽂件 (project)
,它是 qmake ⾃动⽣成的⽤于⽣产 makefile 的配置⽂件。如图所⽰:
在这里插入图片描述
双击进⼊该⽂件,该⽂件的核⼼内容如下:
QT += core gui // Qt 包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //⼤于 Qt4 版本才包含 widget 模块
TARGET = QtFirst //应⽤程序名⽣成的 .exe 程序名称
TEMPLATE = app //模板类型,应⽤程序模板
SOURCES += main.cpp\ //源⽂件
widget.cpp //源⽂件
HEADERS += widget.h //头⽂件
“.pro” ⽂件的写法如下:

  1. 注释:从 “#” 开始,到这⼀⾏结束。
  2. QT += core gui // Qt 包含的模块 Qt5 包含的模块如下图所⽰:

在这里插入图片描述
3. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 这条语句的含义是,如果
QT_MAJOR_VERSION ⼤于 4 也就是当前使⽤的 Qt5 及更⾼版本) 需要增加 widgets 模块。如果
项⽬仅需⽀持 Qt5 , 也可以直接
添加 “QT += widgets” ⼀句。不过为了保持代码兼容 ,最好还是按照 QtCreator ⽣成的语句编写。
4. 指定⽣成的应⽤程序名:TARGET = QtDemo
5. TEMPLATE = app //模板。告诉 qmake 为这个应⽤程序⽣成哪种 makefile。下⾯是可供选择的模
板:
⚫ app:建⽴⼀个应⽤程序的 makefile。这是默认值,所以如果模板没有被指定,这个将被使
⽤。
⚫ lib :建⽴⼀个库的 makefile。
⚫ vcapp:建⽴⼀个应⽤程序的 VisualStudio 项⽬⽂件。
⚫ vclib: 建⽴⼀个库的 VisualStudio 项⽬⽂件。
⚫ subdirs:这是⼀个特殊的模板,它可以创建⼀个能够进⼊特定⽬录的 makefile 并且为它调⽤
make 的 makefile。
6. ⼯程中包含的源⽂件:SOURCES += main.cpp/widget.cpp
7. ⼯程中包含的头⽂件:HEADERS += widget.h
8. ⼯程中包含的资源⽂件:RESOURCES += painter.qrc
9. ⼯程中包含的 “ui” 设计⽂件:FORMS += widget.ui
10. 配置信息:CONFIG += c++11 (使⽤ c++11 的特性) CONFIG ⽤来告诉 qmake 关于应⽤程序的配
置信息。

5.2 widget.h ⽂件解析

在Qt中,如果要使⽤信号与槽(signal 和 slot)的机制 就必须加⼊ Q_OBJECT 宏;
Ui::Widget *ui; 这个指针是⽤前⾯声明的 namespace Ui ⾥的 Widget 类定义的,所以指针 ui 是指向
可视化设计的界⾯,后⾯要访问界⾯上的组件,都需要通过这个指针 ui 去访问。
在这里插入图片描述

5.3 main.cpp ⽂件解析

使⽤ Qt Creator 新建任意⼯程之后,main.cpp ⽂件中都会⾃动⽣成如下代码:
在这里插入图片描述
解释:

  1. Qt 系统提供的标准类名 声明头⽂件没有 .h 后缀;
  2. Qt ⼀个类对应⼀个头⽂件,类名 就是 头⽂件名;
  3. QApplication 为应⽤程序类;QApplication a;(a为应⽤程序对象,有且仅有⼀个。)
    ⚫ QApplication 管理图形⽤⼾界⾯应⽤程序的控制流和主要设置。
    ⚫ QApplication 是 Qt 的整个后台管理的命脉。它包含主事件循环,在其中来⾃窗⼝系统和其它
    资源的所有事件处理和调度。它也处理应⽤程序的初始化和结束,并且提供对话管理。
    ⚫ 对于任何⼀个使⽤ Qt 的图形⽤⼾界⾯应⽤程序,都正好存在⼀个 QApplication 对象,⽽不论
    这个应⽤程序在同⼀时间内是不是有 0、1、2 或更多个窗⼝。
  4. myWidget w; //实例化窗⼝对象
  5. w.show(); //调⽤show函数显⽰窗⼝
  6. a.exec() :程序进⼊消息循环,等待对⽤⼾输⼊进⾏响应。这⾥ main()把控制权转交给Qt,Qt 完
    成事件处理⼯作,当应⽤程序退出的时候 exec() 的值就会返回。在 exec() 中,Qt 接受并处理⽤⼾
    和系统的事件并且把它们传递给适当的窗⼝部件。

5.4 widget.cpp ⽂件解析

5.4 widget.cpp ⽂件解析
在这里插入图片描述

5.5 widget.ui ⽂件解析

在这里插入图片描述

widget.ui 是窗体界⾯定义⽂件,是⼀个 XML ⽂件,定义了窗⼝上的所有组件的属性设置、布局,及
其信号与槽函数的关联等。⽤ UI 设计器可视化设计的界⾯都由 Qt ⾃动解析,并以 XML ⽂件的形式保
存下来。在设计界⾯时,只需在 UI 设计器⾥进⾏可视化设计即可,⽽不⽤管 widget.ui ⽂件是怎么⽣
成的。

内存泄漏问题

在这里插入图片描述
eg:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. Qt 编程注意事项

6.1 Qt 中的命名规范
• 类名:⾸字⺟⼤写,单词和单词之间⾸字⺟⼤写;
• 函数名及变量名:⾸字⺟⼩写,单词和单词之间⾸字⺟⼤写;
💡 Qt 偏好驼峰命名法. 这⼀点不像咱们之前课堂上偏好蛇形命名.
在这里插入图片描述
在这里插入图片描述

6.2 Qt Creator 中的快捷键

• 注释:ctrl + /
• 运⾏:ctrl + R
• 编译:ctrl + B
• 字体缩放:ctrl + ⿏标滑轮
• 查找:ctrl + F
• 整⾏移动:ctrl + shift + ⬆/⬇
• 帮助⽂档:F1
• ⾃动对⻬:ctrl + i;
• 同名之间的 .h 和 .cpp 的切换:F4
• ⽣成函数声明的对应定义: alt + enter

6.3 使⽤帮助⽂档

打开帮助⽂档有三种⽅式. 实际编程中使⽤哪种都可以.
1、光标放到要查询的类名/⽅法名上, 直接按 F1
2、Qt Creator 左侧边栏中直接⽤⿏标单击 “帮助” 按钮:
在这里插入图片描述
点击 “帮助” 之后,出现如下图⽰界⾯:

在这里插入图片描述
3、找到 Qt Creator 的安装路径,在 “bin” ⽂件夹下找到 assistant.exe,双击打开
在这里插入图片描述
在这里插入图片描述
使⽤⽰例
1、新建项⽬,在新建的项⽬中使⽤ Qt 中的 “QpushButton” 控件。
2、打开帮助⼿册,在 “索引” ⾥⾯输⼊ “QpushButton”;
在这里插入图片描述
不要使⽤中⽂⽂档!
不要使⽤中⽂⽂档!
不要使⽤中⽂⽂档!
阅读英⽂⽂档是每个程序员必备的专业技能. 必须要练, 不能退缩. Qt 的⽂档从通俗易懂的⻆度来说, 是技术类⽂档中⾮常出类拔萃的. 只要⼤家稍微有点耐⼼, 基本都能读懂个⼋九不离⼗.
咱们后续的学习中, 也会经常翻阅⽂档.

在这里插入图片描述

6.4 认识对象模型(对象树)

在 Qt 中创建很多对象的时候会提供⼀个 Parent 对象指针,下⾯来解释这个 parent 到底是⼲什么的。
• QObject 是以对象树的形式组织起来的。
◦ 当创建⼀个 QObject 对象时,会看到 QObject 的构造函数接收⼀个 QObject 指针作为参数,这个参数就是 parent,也就是⽗对象指针。
◦ 这相当于,在创建 QObject 对象时,可以提供⼀个其⽗对象,我们创建的这个 QObject 对象会⾃动添加到其⽗对象的 children() 列表。
◦ 当⽗对象析构的时候,这个列表中的所有对象也会被析构。(注意,这⾥的⽗对象并不是继承意义上的⽗类!)
这种机制在 GUI 程序设计中相当有⽤。例如,⼀个按钮有⼀个 QShortcut(快捷键)对象作为其⼦对象。当删除按钮的时候,这个快捷键理应被删除。这是合理的。
• QWidget 是能够在屏幕上显⽰的⼀切组件的⽗类。
◦ QWidget 继承⾃ QObject ,因此也继承了这种对象树关系。⼀个孩⼦⾃动地成为⽗组件的⼀个⼦组件。因此,它会显⽰在⽗组件的坐标系统中,被⽗组件的边界剪裁。例如,当⽤⼾关闭
⼀个对话框的时候,应⽤程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该⼀起被删除。事实就是如此,因为这些都是对话框的⼦组件。
◦ 当然,我们也可以⾃⼰删除⼦对象,它们会⾃动从其⽗对象列表中删除。⽐如,当我们删除了⼀个⼯具栏时,其所在的主窗⼝会⾃动将该⼯具栏从其⼦对象列表中删除,并且⾃动调整屏幕显⽰
Qt 引⼊对象树的概念,在⼀定程度上解决了内存问题。
• 当⼀个 QObject 对象在堆上创建的时候,Qt 会同时为其创建⼀个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
• 任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent,则⾃动将其从 parent 的 children() 列表中删除;如果有孩⼦,则⾃动 delete 每⼀个孩⼦。Qt 保证没有 QObject 会被
delete 两次,这是由析构顺序决定的。
如果 QObject 在栈上创建,Qt 保持同样的⾏为。正常情况下,这也不会发⽣什么问题。来看下⾯的代码⽚段:
在这里插入图片描述
作为⽗组件的 window 和作为⼦组件的 quit 都是 QObject 的⼦类(事实上,它们都是QWidget的⼦类,⽽QWidget 是 QObject 的⼦类)。这段代码是正确的,quit 的析构函数不会被调⽤两次,因为标准 C++ 要求,局部对象的析构顺序应该按照其创建顺序的相反过程。因此,这段代码在超出作⽤域时,会先调⽤ quit 的析构函数,将其从⽗对象 window 的⼦对象列表中删除,然后才会再调⽤
window 的析构函数。
但是,如果我们使⽤下⾯的代码:
在这里插入图片描述
情况⼜有所不同,析构顺序就有了问题。我们看到,在上⾯的代码中,作为⽗对象的 window 会⾸先被析构,因为它是最后⼀个创建的对象。在析构过程中,它会调⽤⼦对象列表中每⼀个对象的析构函数,也就是说, quit 此时就被析构了。然后,代码继续执⾏,在 window 析构之后,quit 也会被析构,因为 quit 也是⼀个局部变量,在超出作⽤域的时候当然也需要析构。但是,这时候已经是第⼆次调⽤ quit 的析构函数了,C++ 不允许调⽤两次析构函数,因此,程序崩溃了。
由此我们看到,Qt 的对象树机制虽然在⼀定程度上解决了内存问题,但是也引⼊了⼀些值得注意的事
情。这些细节在今后的开发过程中很可能时不时跳出来烦扰⼀下,所以,我们最好从开始就养成良好
在 Qt 中,尽量在构造的时候就指定 parent 对象,并且⼤胆在堆上创建。

Qt对象树如图:
在这里插入图片描述
代码⽰例
1、创建⼀个新⼯程并编译运⾏,⽣成如下窗⼝;

在这里插入图片描述
2、选中⼯程名,⿏标右键 -------> “add new…”(或 “添加新⽂件” )
在这里插入图片描述
在这里插入图片描述
3、选择 “choose…”,弹出如下界⾯;
在这里插入图片描述
4、点击 “下⼀步”,弹出如下对话框
在这里插入图片描述
5、点击 “完成” 之后,⼿动创建类的头⽂件以及源⽂件会⾃动添加到⽬标⼯程中;
在这里插入图片描述
6、修改头⽂件;
在这里插入图片描述
7、编写源⽂件;
在这里插入图片描述

8、编译并运⾏;
在这里插入图片描述
9、当关闭弹出的对话框时,就会⾃动调⽤按钮的析构函数;
在这里插入图片描述
10、观察析构函数的执⾏顺序;
在这里插入图片描述
11、执⾏结果:
在这里插入图片描述
12、执⾏结果分析:
对象树确保的是先释放⼦节点的内存, 后释放⽗节点的内存.
⽽析构函数的调⽤顺序则不⼀定遵守上述要求. 因此看到⼦节点的析构执⾏顺序反⽽在⽗节点析构顺序
之后.
注意: 调⽤析构函数和释放内存并⾮是同⼀件事情.

笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对象树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
乱码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "mylabel1.h"
#include<iostream>
#include<QDebug>
MyLabel1::MyLabel1(QWidget*parent):QLabel(parent)
{

}

MyLabel1::~MyLabel1()
{
    //std::cout<<"Mylabel 被销毁!"<<std::endl; //中文会出现乱码
    qDebug()<<"Mylabel被销毁了!";
}

在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

6.5 Qt 窗⼝坐标体系

坐标体系:以左上⻆为原点(0,0),X向右增加,Y向下增加。
在这里插入图片描述
对于嵌套窗⼝,其坐标是相对于⽗窗⼝来说的。
⽰例:使⽤Qt中的坐标系设置控件的位置;
在这里插入图片描述
运⾏结果如下图⽰:
在这里插入图片描述

实践

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* button = new QPushButton(this);
    button->setText("按钮");
    button->move(200,300);//单位像素
    this->move(200,0);
}

Widget::~Widget()
{
    delete ui;
}


在这里插入图片描述

总结

以上就是本篇文章的全部内容了,喜欢博主写的内容可以一键三连支持博主!!!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐