【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”
绪论​:
本章将开启Qt的学习,Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位,因为它适合嵌入式和多种平台而被广泛使用,本章将先从认识Qt,再到理解Qt的作用和地位,再到Qt的安装下载,以及创建好一个Qt项目,再到最后的理解Qt项目中提前配备好的文件,带你入门Qt项目。
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。

1. 认识Qt

首先QT是用来桌面应用开发(电脑上写的程序),其中Qt无法开发网页前端和移动开发(虽然目前qt支持了移动开发,但暂时还没啥厂商使用qt开发的)
QT客户端开发的重要任务:编写和用户交互的界面

在用户交互的界面:由两种典型风格构成:

  1. 命令行界面/终端界面(黑框框)TUI,常给程序员使用的专业软件
  2. 图形化界面 GUI 给普通用户使用(也就类似我们常用的windows环境)

而Qt就是用来编写 GUI程序的一套框架~~

在Windows编写GUI程序,有很多种方法,其中QT只是其中之一,windows下还有那些方案可以开发GUI:

  1. Windows API 系统原生提供的API,开发起来非常原始和繁琐(最简单古老的方式)
  2. MFC:使用了面向对象的方式,将Windows API接口进行封装使用(它的影响非常深远)
  3. QT:(1991年左右诞生)其中它和MFC类似同样的都是通过封装的方式写成
    • 但MFC早就不更新了,而QT仍然在不断推陈出新
  4. GTK、WxWidget
  5. Windows Forms:一个给C#给量身定做的一套GUI技术体系(微软的编程语言 C#(C sharp))
  6. WPF、UWP(Windows Forms的升级版)
  7. Electron:本质上是吧HTML这样的网页,打包成一个Windows 上运行的客户端程序(最初用来开发atom文本编辑器的,后来atom没了,被微软的VsCode干趴了),但缺点是运行效率在上面的技术体系中是比较低的

2. Qt 是什么

Qt 是⼀个 跨平台的 C++ 图形⽤⼾界⾯应⽤程序框架

  • 框架:本质就是一群大佬发明出来的,让我们可能更加方便靠谱的写出我们自己的代码(通过框架约束程序员)
  • 其中库和框架都属于大佬把代码写好了,让我们使用
  • 而库被程序员调用(程序员是主题)、框架则是占主题,程序员配合框架,完善填充框架中留出的一些细节
编写c++代码,框架当然也很重要。C++的生态是割裂的离散的,并不想Java存在巨无霸社群,统一天下
C++不同的开源社区、大厂,各自有各自的框架,各自为政
诺基亚的塞班系统:主推Qt来做作为开发

相比之下,像Qt这种,能被大家共识认可的框架,在整个c++生态中并不多见

1991年,计算机中,诞生了许多神奇的东西:Qt、vim、python、OpenGL、Linux、汤老湿…

QT支持的平台:

  • Windows ‒ XP、Vista、Win7、Win8、Win2008、Win10(windows各个版本)
  • Linux(各种发行版)尤其是Linux中的KDE桌面基于Qt 构建
    • TUI 基于命令操作,门槛高但效率也高
    • GUI 基于图形化操作,门槛低,效率也低
    • 也有少数用户使用Linux 桌面,存在几套环境:GNOME(基于GTK 构建)、KDE(基于Qt 构建的),其中Linux桌面使用过程中有很多问题(容易崩溃)
  • Mac系统
  • 嵌入式系统
    • 也是 Qt 主要的战场
    • 日常使用的,冰箱、洗衣机、路由器。。。这些设备也需要计算机,但这些设备的计算机配置硬件就不用很高了,低配置、低成本,其中的图形化界面就是通过Qt 来写,这个领域中也受到了安卓的挑战

Qt 版本

⽬前最新的版本是 Qt 6. 但是相对来说 Qt 6 和 Qt 5 之间的核⼼功能区别不⼤. 并且企业中也仍然有⼤量的项⽬在使⽤ Qt 5.

另外 Qt 在发布的时候还提供了两种许可证:

  • 商业许可: 开发者以商业⽬的使⽤Qt框架进⾏开发和发布软件的许可,开发者需要购买商业许可并按照相关规定使⽤Qt框架。商业许可提供了更多的功能和服务,适合于商业软件开发(需要花钱购买,其中购买它主要提供的是技术支持,买到就是一份服务)
  • 开源许可: 开发者以⾮商业⽬的使⽤Qt框架进⾏开发和发布软件的许可,开发者可以免费使⽤Qt框架,但需要遵守开源许可协议的要求,如在软件中包含Qt许可协议的声明等(白嫖)

Qt 的优点

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

Qt 的应⽤场景

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

开发的知名软件:
剪映、WPS Office 办公软件、Google Earth ⾕歌地图 、VirtualBox 虚拟机软件…

3. Qt 开发环境的搭建

需要安装3个部分:

  1. C++编译器(gcc/cl.exe,并不是Visual Studio不是IDE,编译器只是IDE调用的一个程序)
  2. Qt SDK(SDK 软件开发包)windows版本 Qt SDK里已经内置了 C++ 编译器(内置编译器是mingw,windows版本的gcc/g++)
  3. 需要有个 Qt 的集成开发环境(IDE)
    1. Qt Creator(Qt官方提供的,最容易入门,上手的方式,开箱即用不用怎么配置)虽然过程中存在许多bug 但整体来说挺方便
    2. Visual Studio(功能更强,但需要配置容易出错)
    3. Eclipse(并非只是Java IDE,本身是一个IDE平台可以搭配不同插件构成不同的IDE,但目前市场份额冲击很大 JetBrain、VSCode)
  • 本质只用安装一个 Qt SDK,另外两个就有了

下载Qt SDK:

去官方网站(下载一个安装程序,首选官方网站)
Qt 的官方网站(下载5.14的一个版本相对于不算很新也不老):(国外网站可能速度较慢,想办法fq)

4. Qt Creator安装过程

  1. 关闭网络跳过注册
  2. 选择路径(安装软件所在目录常识:不要代中文、特殊符号以及空格)

Qt SDK中内置的 c++ 编译器(windows 版本的gcc/g++)

在这里插入图片描述


在这里插入图片描述


给我们装好的Qt 配置一下环境变量(不是必须的,但经量配置上防止莫名的错误)

  • 打开环境变量(windows搜索)
  • windows 也是支持多用户的操作系统(分为用户变量、系统变量)
  • 选择Path:也就和Linux中的环境变量是一样的(输入的一个命令从path路径中查找!)
  • 此处就需要把Qt SDK中的某个目录假如到Path环境变量中(bin目录D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin,内部有许多动态库、exe的目录)

将系统变量中的Path中进行添加该目录:

在这里插入图片描述

配置环境变量是为了:

  1. 让操作系统 Qt Creator 工具 ,能够找到Qt SDK 中提供的exe
  2. 运行 Qt 程序的时候,能够找到 .dll 动态库(Windows环境中)
  3. 环境变量简单的理解成:“进程间通信” 机制(让一个进程借助环境变量找到另外一个进程)
在这里插入图片描述

对于安装成功后会有5个程序他们分别是:

  1. Assistant:离线官方文档,也就是存储许多的函数的使用方法(英文文档要有耐心)
  2. Designer:Qt 设计师,图形化的设计界面的工具,拖拽式的快速生成界面(后面经常使用,但是是搭配 Qt Creator来使用)
  3. Linguist:Qt 语言家,作用是对国际化进行支持,有点时候写的程序,要和国际接轨(允许单独创建一个 语言配置文件,把界面需要用到的各种文字,都配置到文件中,并且在文件中提前把各种一样的翻译配置进去)就可以通过简单的 api 切换这里的语言配置
  4. Qt 5.14.2:Qt 的命令行
  5. Qt Creator:Qt 的集成开发根据(学习Qt 过程中最主要的工具)

5. 初始创建Qt项目

  1. 打开QT Creator
  2. 打开右上角的文件选择新建(应用程序)
    1. 在选择Application
    2. Qt Widgets App…
  3. 我们本处只涉及第一个 Qt Widgets 选择后继续
    1. 填写名称
    2. 路径
  4. 构建系统,通过Qt写的程序,涉及到一系列的元编程技术(通过代码来生成代码)
    1. Qt 框架会在编译的时候,自动先调用一系列根据,基于你自己的代码,生成一系列的其他的 C++ 代码,最终编译的代码
    2. 其中 qmake 是老牌的Qt构建工具(默认选择qmake使用即可)
    3. CMake 并非Qt专属,很多的开源项目都会使用CMake
    4. 生成的代码就包含一个类
    5. 此处就是要选择这个自动生成的类的父类
    6. 此处先选择QWidget进行学习
    7. Qt 中内置的类都是以Q开头
    8. 而下面的就是文件名,他和上面的类是关联的(其中可以不一样,但经量保持一致)
    9. Form file 非常关键: Qt中创建图形化界面的程序,有两种方式
      1. 直接通过c++代码的方式创建界面
      2. 通过form file文件,以图形化的方式来生成界面(此时就可以使用Qt Designer 或直接使用Qt Creator 来编辑这个 ui 文件,从而以图形化的方式,快速方便的生成图形化界面)
  5. 选择一下基于那个编译器的Qt SDK 来构建后续代码
  6. 最终完成就创建好了

可以选择版本控制工具(如git…)

在这里插入图片描述

就默认勾选 WinGW 就可以了

在这里插入图片描述

这里是选择 翻译文件(对应的语言)暂时不关注,它是和国际化相关的

在这里插入图片描述

其中 Class name 就是自己生成的类Base class 就是父类

在这里插入图片描述

其中关注:Base Class:使用Qt Creator 创建项目,会自动的生成一些代码

在这里插入图片描述

下一步

在这里插入图片描述

Qt 不仅支持C++、也支持 Python 和 Java

在这里插入图片描述


在这里插入图片描述
    • 其中注意我们创建项目过程中的存储路径,不要有中文路径!!

最终就会构建出一个图形化界面:

在这里插入图片描述

当创建好后,在左下角有运行按钮(绿色三角):

在这里插入图片描述

6. 认识界面及细节

在构建成功后,会自动生成main函数:

  • 其中main函数中有:
    1. 必备的 QApplication对象
  • 构建后会生成,Widget.h类
    1. 其中Q_OBJECT 是一个Qt内置的宏(宏的本质上就是文本替换)
      • Q_OBJECT展开之后,就会生成一大堆代码
      • Qt中有一个非常核心的机制,“信号” 和 “槽”
      • 如果这个类想使用 信号和槽 就需要引入这个宏!
    2. 其中构造函数中的 parent 参数:
      • 是一个引入的“对象树”机制(后续细讲)
      • 创建的Qt对象给挂到对象树(N叉数)上
      • 往树上挂的时候就需要指定 “父节点”
    3. UI::Widget* ui
      • 它和 Form file 密切相关
  • form file
    • 此时在点击左侧的编辑按钮,就会 显示 ui 文件的本题
    • 这个格式 也就是 xml 格式(和html类似,都是使用成对的标签来表示数据)
    • xml 这里的标签,有那些标签有什么含义,都是程序员自己定义的(也就是qt开发的大佬们定义的),只用知道 ui 文件本质就是一个xml即可
    • 类似的就是自定义应用层协议
  • .pro:Qt 项目的工程文件,也是 qmake 工具 构建时候的重要依据
    • 类似于 Linux 中学习的 makefile 文件
    • qmake 搭配 .pro 起到的作用 和 makefile 类似的
  • 上面看到的 .h .cpp .pro .ui 都是源代码
    • 如果编译运行 Qt 项目,构建过程中还会生成一些中间文件
    • 这个目录里面就是项目运行过程中,生成的一些临时文件:
      • 其中就会有makefile文件(qmake + pro生成)、ui_widget.h(内部就是根据xml生成的代码),他们都是自动生成的
    • 在Debug中还会有一个 .exe(他本质就是我们生成可执行程序也是生成的界面!)

ui_widget.h本质就是根据xml生成,也就是最终界面的效果展示的具体代码(具体逻辑如下图)

在这里插入图片描述

其中我们在运行一次 程序后就会生成一个: build-xxxx

在这里插入图片描述

打开文件管理器,查看项目对应的目录

在这里插入图片描述

而其中 我们这里并不用去学习 qmake 和 .pro 因为Qt Creator把这个过程都封装好了,所以我们并不用过多关注,仅需要点击运行即可

在这里插入图片描述

Qt 中使用 xml文件就是描述程序的界面是啥样的,进一步的qmake会调用相关的工具,依据这个xml文件生成一些c++代码,从而把完整的界面构造出来

在这里插入图片描述

当我们双击 ui 文件,此时 Qt Creator 就会调用Qt Designer,打开UI文件,图形化的界面编辑器

在这里插入图片描述

widget.cpp

在这里插入图片描述

Widget对象,根据对象就是我们创建项目时选择的QWidget

在这里插入图片描述

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量QT细致内容,早关注不迷路。

Read more

ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库

ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库 【免费下载链接】exceljs 项目地址: https://gitcode.com/gh_mirrors/exc/exceljs ExcelJS 是一个功能强大的 JavaScript 库,专门用于读取、操作和写入 Excel 电子表格数据,支持 XLSX 和 JSON 格式。它是一个开源项目,旨在提供一个简单而强大的接口来处理电子表格数据。 项目介绍 ExcelJS 是一个跨平台的 Excel 处理库,不仅可以在 Node.js 环境中使用,还支持浏览器环境,使其成为一个非常灵活的工具。它支持丰富的功能,包括单元格样式、公式、图表、图片插入、数据验证等高级功能。 快速开始

By Ne0inhk

JavaScript完全指南:从入门到精通

一、JavaScript基础概念 1.1 什么是JavaScript? JavaScript(简称JS)是一种轻量级的解释型编程语言,主要用于为网页添加交互性。它是Web开发的三大核心技术之一(HTML、CSS、JavaScript)。 1.2 JavaScript的历史 * 1995年:Brendan Eich在10天内创造了JavaScript,最初名为Mocha * 1996年:改名为LiveScript,最后定名为JavaScript * 1997年:ECMAScript标准建立 * 2009年:Node.js诞生,JS可在服务器端运行 * 2015年:ES6(ECMAScript 2015)发布,引入大量新特性 * 至今:持续发展和完善,每年都有新版本 1.3 JavaScript的特点 * 解释型语言:无需编译,直接在浏览器中执行 * 动态类型:变量类型在运行时确定 * 函数式编程:支持高阶函数、闭包等特性 * 面向对象:

By Ne0inhk
【Java 开发日记】阻塞队列有哪些?拒绝策略有哪些?

【Java 开发日记】阻塞队列有哪些?拒绝策略有哪些?

目录 阻塞队列有哪些? 拒绝策略有哪些? 面试回答 阻塞队列有哪些? 在Java的java.util.concurrent包里面,阻塞队列的实现挺多的,我们可以根据它的功能和结构来记,主要分这么几类: 1. 按容量划分: * 有界队列: 就是队列有固定的容量。 * ArrayBlockingQueue: 最经典的一个,底层是数组,创建时必须指定大小。它的生产和消费用同一把锁,性能相对稳定。 * LinkedBlockingQueue: 底层是链表,它既可以是有界的(构造时指定容量),也可以默认是无界的(默认是Integer.MAX_VALUE,几乎相当于无界)。它的生产和消费用了两把锁,在高并发场景下吞吐量通常比ArrayBlockingQueue更高。 * 无界队列: 理论上是无限的,只要内存够就能一直放。 * PriorityBlockingQueue: 一个支持优先级排序的无界队列。元素必须实现Comparable接口,或者构造时传入Comparator。它出队的顺序是按优先级来的,不是先进先出 * DelayQueue: 一个很特殊的队

By Ne0inhk
【JAVA 进阶】深入理解Sentinel:分布式系统的流量守卫者

【JAVA 进阶】深入理解Sentinel:分布式系统的流量守卫者

文章目录 * 前言 * 第一章 初识Sentinel:分布式系统的流量安全阀 * 1.1 什么是Sentinel? * 1.2 为什么需要Sentinel? * 1.2.1 分布式系统的稳定性痛点 * 1.2.2 Sentinel的核心价值 * 1.3 Sentinel的核心概念 * 1.3.1 资源 * 1.3.2 规则 * 1.3.3 插槽链(Slot Chain) * 1.3.4 令牌桶与漏桶算法 * 第二章 Sentinel环境搭建:从控制台到客户端 * 2.1 Sentinel Dashboard搭建 * 2.1.1

By Ne0inhk