第一章 Qt 概述Qt 简介Qt 是一个跨平台的 C 图形用户界面应用程序框架常用于开发桌面应用、嵌入式界面和一些跨平台工具。作为笔记我就直接把重点放在环境搭建、Qt Creator 的基本使用以及第一个窗口程序的运行上了真的对qt背景感兴趣的自己去百度吧这勒就随便介绍了2. 搭建 Qt 开发环境2.1 Qt 的开发工具概述Qt 支持多种开发工具其中比较常用的开发工具有Qt Creator、Visual Studio、Eclipse.1、Qt CreatorQt 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 框架的开发者。 后续示例使用 Qt Creator 开发 Qt 程序。2、Visual StudioVisual 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、EclipseEclipse 是著名的跨平台的自由集成开发环境IDE。最初主要用来 Java 语言开发但是目前亦有人通过插件使其作为其他计算机语言比如 C 和 Python 的开发工具。Eclipse 的本身只是一个框架平台但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。许多软件开发商以 Eclipse 为框架开发自己的 IDE。Qt 框架可以与 Eclipse 集成使开发者可以使用 Eclipse 的强大功能来开发 Qt 应用程序。2.2 Qt SDK 的下载和安装2.2.1 Qt SDK 的下载Qt 下载官网http://download.qt.io/archive/qt/国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/进入官网按如下图示进行相应的系统版本下载即可。1、打开官网链接进入如下图示界面2、选择需要下载的版本本课件以5.14版本为例所选具体版本为5.14.23、选择需要下载的版本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 Creator3.1 Qt Creator 概览从 开始菜单 或者 快捷方式 打开 Qt Creator 集成开发环境启动之后看到类似下面的界面①菜单栏。菜单栏一共有 8 个菜单选项包含了常用的功能菜单文件 包含了新建、打开、关闭项目和文件、打印和退出等基本功能编辑 包含了撤销、剪切、复制、查找和选择编码等功能构建 包含构建和运行项目等相关功能。调试 包含调试运行项目等相关功能。Analyze 包含 QML 分析器、Valgrind 内存和功能分析器等相关功能。工具提供了快速定位菜单、外部工具菜单等。这里的选项菜单中包含了 Qt Creator 各个方面的设置选项环境设置、文本编辑器设置、帮助设置、构建和运行设置、调试器设置和版本控制设置等。控件 包含了设置窗口布局的一些菜单如全屏显示和隐藏边栏功能等。帮助 包含 Qt 帮助、Qt Creator 版本信息、报告bug和插件管理等菜单。②模式选择欢迎模式 主要提供了一些功能的快捷入口如打开帮助教程、打开示例程序、打开项目、新建项目、快速打开以前的项目和会话、联网查看 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 Results7个选项它们分别对应一个输出窗口响应的快捷键依次是 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 ApplicationQt 控制台应用程序。因为 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 的文件。• CMakeCMake 是一个跨平台的构建工具。CMake 本身不是一个编译器其实就是生成一个让编译器能读懂编译流程的文件工具。让 CMake 自动生成构建系统例如 Makefile 和 Visual Studio项目文件。CMake 是一个第三方工具有自己的文档。• QbsQbsQt Build SuiteQt构建套件同 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 包含视图显示当前项目里.h 、.cpp 以及 Qt 类库头文件之间的包含关系。Hierarchy3.3.2 代码编辑区①和②导航按钮 “返回” 和 “前进”这与网页浏览器的前进和后退按钮类似可以在之前浏览的多个代码文件或一个代码文件里多个位置之间快速切换。③标识当前显示的文件是只读还是可写一般都是可写的。④文件类型图标当前显示文件的类型这个控件其实是一个菜单按钮点击可以弹出丰富的文件处理功能菜单。⑤打开的文件名可以在多个打开的文件之间选择切换与边栏的 “打开文档” 视图是对应的。⑥关闭当前显示的文档。⑦为当前显示的文件添加额外的C预处理指令一般用不着。⑧选择符号可以在当前显示的文件里多个函数、类、成员变量等之前快速切换与边栏大纲视图是对应的。⑨编辑区光标的行号和列号。⑩代码编辑区分栏可以增加多个编辑器窗口显示多个打开的文档或显示较大源码文件的多个位置。行首区主要用来显示代码行号以及调试断点标志和代码书签标志。右击行首区可以弹出右键菜单菜单里可以切换书签、编辑书签以及设置或取消断点。同一行是既可以打断点也可以设置书签的二者不冲突其实它们根本就没关系。单击行号前面的浅灰色空白区可以直接打断点再次单击可以取消断点另外也可以用快捷键 F9 设置或取消断点。代码书签一般用右键菜单来设置也可以用快捷键 CtrlM 设置或取消书签。编辑区写代码的区域。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 套件或构建类型直接选中相应条目然后点击运行按钮就行了。如果构建和运行时没出错就会显示出构建好的目标程序界面。• 第二个是运行按钮快捷键是 CtrlR如果还没构建项目或刚修改了代码直接点击运行的话QtCreator 会自动构建生成新的目标程序并运行。• 第三个是调试按钮快捷键是 F5。调试程序之前QtCreator 会自动构建生成最新的目标程序并进入调试模式。• 第四个是构建按钮快捷键是 CtrlB只构建最新的目标程序但不运行。4. Qt Hello World 程序4.1 使用 “按钮” 实现4.1.1 纯代码方式实现实现效果如下图4.1.2 可视化操作实现1双击 widget.ui 文件2拖拽控件至 ui 界面窗口并修改内容3构建并运行效果如下所示4.2 使用 “标签” 实现4.2.1 纯代码方式实现实现效果4.2.2 可视化操作实现1双击 widget.ui 文件2拖拽 “标签” 至 UI 设计界面中并双击修改标签内容3实现效果如下图所示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 QtDemo5. TEMPLATE app //模板。告诉 qmake 为这个应用程序生成哪种 makefile。下面是可供选择的模板⚫ app建立一个应用程序的 makefile。这是默认值所以如果模板没有被指定这个将被使用。⚫ lib 建立一个库的 makefile。⚫ vcapp建立一个应用程序的 VisualStudio 项目文件。⚫ vclib 建立一个库的 VisualStudio 项目文件。⚫ subdirs这是一个特殊的模板它可以创建一个能够进入特定目录的 makefile 并且为它调用make 的 makefile。6. 工程中包含的源文件SOURCES main.cpp/widget.cpp7. 工程中包含的头文件HEADERS widget.h8. 工程中包含的资源文件RESOURCES painter.qrc9. 工程中包含的 “ui” 设计文件FORMS widget.ui10. 配置信息CONFIG c11 (使用 c11 的特性) 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 aa为应用程序对象有且仅有一个。⚫ QApplication 管理图形用户界面应用程序的控制流和主要设置。⚫ QApplication 是 Qt 的整个后台管理的命脉。它包含主事件循环在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束并且提供对话管理。⚫ 对于任何一个使用 Qt 的图形用户界面应用程序都正好存在一个 QApplication 对象而不论这个应用程序在同一时间内是不是有 0、1、2 或更多个窗口。4. myWidget w; //实例化窗口对象5. w.show() //调用show函数显示窗口6. a.exec() 程序进入消息循环等待对用户输入进行响应。这里 main()把控制权转交给QtQt 完成事件处理工作当应用程序退出的时候 exec() 的值就会返回。在 exec() 中Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。5.4 widget.cpp 文件解析widget.cpp 文件是类 Widget 的实现代码所有在窗体上要实现的功能添加在此文件中5.5 widget.ui 文件解析widget.ui 是窗体界面定义文件是一个 XML 文件定义了窗口上的所有组件的属性设置、布局及其信号与槽函数的关联等。用 UI 设计器可视化设计的界面都由 Qt 自动解析并以 XML 文件的形式保存下来。在设计界面时只需在 UI 设计器里进行可视化设计即可而不用管 widget.ui 文件是怎么生成的。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 enter6.3 使用帮助文档打开帮助文档有三种方式. 实际编程中使用哪种都可以.1、光标放到要查询的类名/方法名上, 直接按 F12、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、执行结果分析对象树确保的是先释放子节点的内存, 后释放父节点的内存.而析构函数的调用顺序则不一定遵守上述要求. 因此看到子节点的析构执行顺序反而在父节点析构顺序之后.注意: 调用析构函数和释放内存并非是同一件事情.6.5 Qt 窗口坐标体系坐标体系以左上角为原点0,0X向右增加Y向下增加。对于嵌套窗口其坐标是相对于父窗口来说的。示例使用Qt中的坐标系设置控件的位置运行结果如下图示
第一章 Qt 概述_csdn
发布时间:2026/5/31 23:26:57
第一章 Qt 概述Qt 简介Qt 是一个跨平台的 C 图形用户界面应用程序框架常用于开发桌面应用、嵌入式界面和一些跨平台工具。作为笔记我就直接把重点放在环境搭建、Qt Creator 的基本使用以及第一个窗口程序的运行上了真的对qt背景感兴趣的自己去百度吧这勒就随便介绍了2. 搭建 Qt 开发环境2.1 Qt 的开发工具概述Qt 支持多种开发工具其中比较常用的开发工具有Qt Creator、Visual Studio、Eclipse.1、Qt CreatorQt 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 框架的开发者。 后续示例使用 Qt Creator 开发 Qt 程序。2、Visual StudioVisual 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、EclipseEclipse 是著名的跨平台的自由集成开发环境IDE。最初主要用来 Java 语言开发但是目前亦有人通过插件使其作为其他计算机语言比如 C 和 Python 的开发工具。Eclipse 的本身只是一个框架平台但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。许多软件开发商以 Eclipse 为框架开发自己的 IDE。Qt 框架可以与 Eclipse 集成使开发者可以使用 Eclipse 的强大功能来开发 Qt 应用程序。2.2 Qt SDK 的下载和安装2.2.1 Qt SDK 的下载Qt 下载官网http://download.qt.io/archive/qt/国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/进入官网按如下图示进行相应的系统版本下载即可。1、打开官网链接进入如下图示界面2、选择需要下载的版本本课件以5.14版本为例所选具体版本为5.14.23、选择需要下载的版本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 Creator3.1 Qt Creator 概览从 开始菜单 或者 快捷方式 打开 Qt Creator 集成开发环境启动之后看到类似下面的界面①菜单栏。菜单栏一共有 8 个菜单选项包含了常用的功能菜单文件 包含了新建、打开、关闭项目和文件、打印和退出等基本功能编辑 包含了撤销、剪切、复制、查找和选择编码等功能构建 包含构建和运行项目等相关功能。调试 包含调试运行项目等相关功能。Analyze 包含 QML 分析器、Valgrind 内存和功能分析器等相关功能。工具提供了快速定位菜单、外部工具菜单等。这里的选项菜单中包含了 Qt Creator 各个方面的设置选项环境设置、文本编辑器设置、帮助设置、构建和运行设置、调试器设置和版本控制设置等。控件 包含了设置窗口布局的一些菜单如全屏显示和隐藏边栏功能等。帮助 包含 Qt 帮助、Qt Creator 版本信息、报告bug和插件管理等菜单。②模式选择欢迎模式 主要提供了一些功能的快捷入口如打开帮助教程、打开示例程序、打开项目、新建项目、快速打开以前的项目和会话、联网查看 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 Results7个选项它们分别对应一个输出窗口响应的快捷键依次是 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 ApplicationQt 控制台应用程序。因为 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 的文件。• CMakeCMake 是一个跨平台的构建工具。CMake 本身不是一个编译器其实就是生成一个让编译器能读懂编译流程的文件工具。让 CMake 自动生成构建系统例如 Makefile 和 Visual Studio项目文件。CMake 是一个第三方工具有自己的文档。• QbsQbsQt Build SuiteQt构建套件同 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 包含视图显示当前项目里.h 、.cpp 以及 Qt 类库头文件之间的包含关系。Hierarchy3.3.2 代码编辑区①和②导航按钮 “返回” 和 “前进”这与网页浏览器的前进和后退按钮类似可以在之前浏览的多个代码文件或一个代码文件里多个位置之间快速切换。③标识当前显示的文件是只读还是可写一般都是可写的。④文件类型图标当前显示文件的类型这个控件其实是一个菜单按钮点击可以弹出丰富的文件处理功能菜单。⑤打开的文件名可以在多个打开的文件之间选择切换与边栏的 “打开文档” 视图是对应的。⑥关闭当前显示的文档。⑦为当前显示的文件添加额外的C预处理指令一般用不着。⑧选择符号可以在当前显示的文件里多个函数、类、成员变量等之前快速切换与边栏大纲视图是对应的。⑨编辑区光标的行号和列号。⑩代码编辑区分栏可以增加多个编辑器窗口显示多个打开的文档或显示较大源码文件的多个位置。行首区主要用来显示代码行号以及调试断点标志和代码书签标志。右击行首区可以弹出右键菜单菜单里可以切换书签、编辑书签以及设置或取消断点。同一行是既可以打断点也可以设置书签的二者不冲突其实它们根本就没关系。单击行号前面的浅灰色空白区可以直接打断点再次单击可以取消断点另外也可以用快捷键 F9 设置或取消断点。代码书签一般用右键菜单来设置也可以用快捷键 CtrlM 设置或取消书签。编辑区写代码的区域。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 套件或构建类型直接选中相应条目然后点击运行按钮就行了。如果构建和运行时没出错就会显示出构建好的目标程序界面。• 第二个是运行按钮快捷键是 CtrlR如果还没构建项目或刚修改了代码直接点击运行的话QtCreator 会自动构建生成新的目标程序并运行。• 第三个是调试按钮快捷键是 F5。调试程序之前QtCreator 会自动构建生成最新的目标程序并进入调试模式。• 第四个是构建按钮快捷键是 CtrlB只构建最新的目标程序但不运行。4. Qt Hello World 程序4.1 使用 “按钮” 实现4.1.1 纯代码方式实现实现效果如下图4.1.2 可视化操作实现1双击 widget.ui 文件2拖拽控件至 ui 界面窗口并修改内容3构建并运行效果如下所示4.2 使用 “标签” 实现4.2.1 纯代码方式实现实现效果4.2.2 可视化操作实现1双击 widget.ui 文件2拖拽 “标签” 至 UI 设计界面中并双击修改标签内容3实现效果如下图所示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 QtDemo5. TEMPLATE app //模板。告诉 qmake 为这个应用程序生成哪种 makefile。下面是可供选择的模板⚫ app建立一个应用程序的 makefile。这是默认值所以如果模板没有被指定这个将被使用。⚫ lib 建立一个库的 makefile。⚫ vcapp建立一个应用程序的 VisualStudio 项目文件。⚫ vclib 建立一个库的 VisualStudio 项目文件。⚫ subdirs这是一个特殊的模板它可以创建一个能够进入特定目录的 makefile 并且为它调用make 的 makefile。6. 工程中包含的源文件SOURCES main.cpp/widget.cpp7. 工程中包含的头文件HEADERS widget.h8. 工程中包含的资源文件RESOURCES painter.qrc9. 工程中包含的 “ui” 设计文件FORMS widget.ui10. 配置信息CONFIG c11 (使用 c11 的特性) 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 aa为应用程序对象有且仅有一个。⚫ QApplication 管理图形用户界面应用程序的控制流和主要设置。⚫ QApplication 是 Qt 的整个后台管理的命脉。它包含主事件循环在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束并且提供对话管理。⚫ 对于任何一个使用 Qt 的图形用户界面应用程序都正好存在一个 QApplication 对象而不论这个应用程序在同一时间内是不是有 0、1、2 或更多个窗口。4. myWidget w; //实例化窗口对象5. w.show() //调用show函数显示窗口6. a.exec() 程序进入消息循环等待对用户输入进行响应。这里 main()把控制权转交给QtQt 完成事件处理工作当应用程序退出的时候 exec() 的值就会返回。在 exec() 中Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。5.4 widget.cpp 文件解析widget.cpp 文件是类 Widget 的实现代码所有在窗体上要实现的功能添加在此文件中5.5 widget.ui 文件解析widget.ui 是窗体界面定义文件是一个 XML 文件定义了窗口上的所有组件的属性设置、布局及其信号与槽函数的关联等。用 UI 设计器可视化设计的界面都由 Qt 自动解析并以 XML 文件的形式保存下来。在设计界面时只需在 UI 设计器里进行可视化设计即可而不用管 widget.ui 文件是怎么生成的。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 enter6.3 使用帮助文档打开帮助文档有三种方式. 实际编程中使用哪种都可以.1、光标放到要查询的类名/方法名上, 直接按 F12、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、执行结果分析对象树确保的是先释放子节点的内存, 后释放父节点的内存.而析构函数的调用顺序则不一定遵守上述要求. 因此看到子节点的析构执行顺序反而在父节点析构顺序之后.注意: 调用析构函数和释放内存并非是同一件事情.6.5 Qt 窗口坐标体系坐标体系以左上角为原点0,0X向右增加Y向下增加。对于嵌套窗口其坐标是相对于父窗口来说的。示例使用Qt中的坐标系设置控件的位置运行结果如下图示