当前位置: 首页 > news >正文

【Qt】:概述(下载安装、认识 QT Creator)

🌈 个人主页:Zfox_
🔥 系列专栏:Qt

目录

  • 一:🔥 介绍
    • 🦋 什么是 QT
    • 🦋 QT 发展史
    • 🦋 Qt版本
    • 🦋 QT 优点
  • 一:🔥 搭建Qt开发环境
    • 🦋 QT 开发工具
    • 🦋 QtSDK的下载
    • 🦋 QtSDK的安装
    • 🦋 环境变量配置
    • 🦋 认识 SDK 的重要工具
  • 三:🔥 认识QtCreator
    • 🦋 QtCreator概览
    • 🦋 使用 QT Creator 创建项目
      • 新建项目
      • 选择项⽬模板
      • 选择项目路径
      • 选择构建工具
      • 填写类信息设置界面
      • 选择语言和翻译软件
      • 选择 Qt 套件
      • 选择版本控制系统
      • 最终效果演示
    • 🦋 认识QtCreator界⾯
      • 左边栏
      • 代码编辑区
      • UI 设计页面
    • 🦋 3.4 项目代码解析
      • widget.h
      • main.cpp
      • widget.cpp
      • widget.ui
      • .pro 工程文件
      • Qt 可选模块如下
    • 🦋 中间文件
  • 四:🔥 共勉

一:🔥 介绍

🦋 什么是 QT

🔥 QT 是一个 跨平台的 C++ 图形用户界面应用程序框架。它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。QT 为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应用程序,同时也可以使用 C++ 语言进行高级开发。

🧑‍💻 所谓 框架 其实是一个 “半成品”,帮助项目搭建 “骨架”,并提供丰富的组件库,开发人员只需增加一些内容或调用一些提供好的组件就可以完成系统。

🧑‍💻 框架 其实优点相似的,都是由大佬提前写好的,让我们去使用的,但是本质上还是有区别的。库是被程序员调用的,主体是程序员,但是框架的主体是框架本身,是程序员配合框架完善,填充框架留下的一些细节。

🦋 QT 发展史

  • 1991 年 QT 最早由芬兰奇趣科技开发
  • 1996 年 进入商业领域,它也是目前流行的Linux桌面环境KDE的基础
  • 2008 年 奇趣科技被诺基亚公司收购,Qt称为诺基亚旗下的编程基础
  • 2012年 QT 又被Digia公司(芬兰一家软件公司)收购
  • 2014 年 4 月 跨平台的集成开发环境 Qt Creator3.1.0 发布,同年 5月20日配发了 Qt5.3 正式版,至此 Qt 实现了对 iOS、Android、WP 等各平台的全面支持。

🦋 Qt版本

🧑‍💻 ⽬前最新的版本是Qt6.但是相对来说Qt6和Qt5之间的核⼼功能区别不⼤.并且企业中也仍然有⼤量的项⽬在使⽤Qt5.(Qt6目前的bug相当多 Qt 5.15和 Qt5.14 基本就是最稳定的版本了)

🦋 QT 优点

  • 跨平台,几乎支持所有的平台
  • 接口简单,容易上手,学习QT框架对学习其他框架有参考意义一定程度上简化了内存回收机制;开发效率高,能够快速的构建应用程序。
  • 有很好的社区氛围,市场份额在缓慢上升。
  • 可以进行嵌入式开发。

一:🔥 搭建Qt开发环境

🦋 QT 开发工具

💻 Qt 支持多种开发工具,其中比较常用的开发工具有:QtCreator、VisualStudio、Eclipse.

  1. QtCreator

🔥 Qt Creator 是⼀个轻量级的跨平台集成开发环境(IDE),专为使用 QT 框架进行应用程序开发而设计。它是⼀个功能强大、易于使用、快速且高效的工具,被广泛使用于编写各种类型的应用程序,如桌面应用程序、移动应用程序和嵌入式系统等。

🧑‍💻 Qt Creator 提供了⼀个可视化的界⾯设计器和代码编辑器,可以帮助开发者更快捷地创建复杂的用户界面和处理各种事件。它还包含了调试工具、版本控制工具、自动完成和智能提示等功能,以及支持多语言和跨平台的开发环境

Qt Creator 的主要特点包括:

  • 紧密集成的 Qt 框架:Qt Creator 专门为 Qt 开发而设计,因此它与 Qt 框架集成得非常紧密,使开发者可以更容易地管理和部署他们的应用程序。
  • 强大的编辑器:Qt Creator 具有一些先进的编辑器功能,如语法高亮、代码折叠、智能提示、自动完成和代码重构。
  • 集成的调试器:Qt Creator 内置了调试器,允许开发人员在代码中设置断点以及检查变量、堆栈和调用树等信息。
  • 高效的构建系统:Qt Creator 提供了⼀个高效的构建系统,可以自动构建和部署应用程序,同时支持使用不同的编译器和平台。
  • 可视化界面设计器:Qt Creatorr 具有⼀个可视化界面设计器,它允许开发⼈员在没有编写代码的情况下创建复杂的用户界面
  • 多语言支持:Qt Creator 支持多种编程语言,包括C++、QML、Javascript 等。总而言之,Creator 是一个功能齐全、易于使用且高效的跨平台 IDE,适用于各种类型的应用程序开发,特别是那些使用 Qt 框架的开发者

总而言之,Qt Creator 是⼀个功能齐全、易于使用且高效的跨平台 IDE,适用于各种类型的应用程序开发,特别是那些使用 QT 框架的开发者

  1. Visual Studio

🔥 Visual Studio 是由微软公司开发的集成开发环境(IDE)。它可以用来开发多种类型的应用程序。包括 windows 桌面应用程序、web 应用程序、移动应用程序、游戏等。 Visual studio 提供了丰富的开发工具和功能,包括代码编辑器、调试器、自动完成、代码重构、版本控制只等等。它支持多种编程语言,如:C++、C#、Visual Basic、F#、Python 等。

Visual Studio 具有以下一些主要特点:

  • 多语言支持:Visual Studio 支持多种编程语言,包括 C++、C#、Visual Basic、F#、Python、JavaScript 等
  • 丰富的工具集:vs 提供了各种开发工具,包括代码编辑器、调试器、代码分析工具等,以提高开发人员的效率
  • 可视化设计:vs 提供了可视化的设计工具,如窗体设计器、 WPF 设计器等,使开发人员可以直观地设计用户界面
  • 跨平台开发:vs 支持跨平台开发,可以开发适用于 Windows、Linux 和 macOs 等多个平台的应用程序
  • 集成的调试器:vs 集成了强大的调试器,可以进行代码的单步调试、断点调试等操作来帮助开发人员查找和修复错误
  • 丰富的扩展性:vs 可以通过安装扩展来扩展其功能,开发人员可以根据自己的需求选择并安装适合的护展。
  1. Eclipse

🔥 Eclipse 是著名的跨平台的自由集成开发环境(IDE)。最初主要用来 Java 语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如 C++ 和 Python 的开发工具。Eclipse 的本身只是一个框架平台,但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。许多软件开发商以 Eclipse 为框架开发自己的 IDE。QT框架可以与 Eclipse 集成,使开发者可以使用 Eclipse 的强大功能来开发 QT 应用程序

🦋 QtSDK的下载

Qt下载官⽹http://download.qt.io/archive/qt/

⏬ 进⼊官⽹,按如下图⽰进⾏相应的系统版本下载即可。

  1. 打开官⽹链接,进⼊如下图⽰界⾯;
    在这里插入图片描述
  2. 选择需要下载的版本;(本文以 5.14版本为例,所选具体版本为:5.14.2)
    在这里插入图片描述
  3. 选择需要下载的版本;
    在这里插入图片描述
  4. 选择Windows桌⾯应⽤程序;

🦋 QtSDK的安装

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

在这里插入图片描述

  1. 直接下一步,然后再下一步选择安装文件夹(注意:不能路径不能带中文)
    在这里插入图片描述
  2. 选择安装组件;这⾥我们安装的是QtCreator。如果电脑磁盘空间允许,建议全选以便后续使 ⽤,如果空间不允许, 选择部分组件;说明:其他未安装的组件在使⽤时可以另⾏添加; 在这里插入图片描述

在这里插入图片描述

4. 同意安装协议, 之后直接无脑next就行了;

在这里插入图片描述

🦋 环境变量配置

  1. 找到我们之前安装的 QT文件,然后点击箭头指向的地方,复制粘贴即可
    在这里插入图片描述
  2. "此电脑"------>⿏标右键,"属性"------>"⾼级系统设置"------>"环境变量"

请添加图片描述

  1. "新建"------>填⼊"bin"路径------>"确定";

请添加图片描述

🦋 认识 SDK 的重要工具

📚 我们下载完成后就可以看到以下几个部分:

在这里插入图片描述
📚 第一个 Assistant 是一个 QT 的离线文档,用来查找 QT 的一些 API 的使用方法

在这里插入图片描述
第二个 designer 是一个图形化设计工具,可以通过拖拽的方式进行速成界面

第三个 linguist 是 QT 语言家,作用就是对国际化进行支持。允许你进行单独的创建一个语言文件配置,把界面上出现到的各种文字都配置到文件中,并且在文件中提前做好翻译工作,这样就可以做到一键切换语言。

第四个就是一个终端界面,可以通过执行命令的方式进行编译代码

第五个就是 QT 的一个集成开发工具,也是我们主要使用的工具.

三:🔥 认识QtCreator

🦋 QtCreator概览

📚 从开始菜单或者快捷⽅式打开QtCreator集成开发环境,启动之后看到类似下⾯的界⾯:请添加图片描述

  1. 菜单栏:菜单栏⼀共有8个菜单选项,包含了常⽤的功能菜单:
    在这里插入图片描述
  2. 模式选择
    在这里插入图片描述
  3. 构建套件选择器:构建套件选择器包含了 目标选择器 (Targetselector)、运行按钮 (Run)、调试按钮 (Debug) 和 构建按钮 (Building) 四个图标

在这里插入图片描述
4. 窗口模式下的工作模式

在这里插入图片描述

  1. 定位器 :使用定位器来快速定位项目、文件、类、方法、帮助文档以及文件系统。可以使用过滤器来更加准确地定位要查找的结果。

  2. 输出窗格 :输出窗格包含了问题、搜索结果 (Search Results)、应用程序输出、编译输出、Debugger Console、概要信息、测试结果 (Test Results) 7个选项,它们分别对应一个输出窗口,响应的快捷键依次是 Alt+ 数字 1~7。
    在这里插入图片描述

  3. 会话记录 :可以对会话进行管理,包括 Clone。如果没打开工程,则显示的是最后一次打开的(会话)工程,否则,显示当前的会话(工程)

  4. 新建项目

  5. 打开已有项目

🦋 使用 QT Creator 创建项目

新建项目

请添加图片描述

选择项⽬模板

📚 弹出如下对话框:

请添加图片描述

📚 新建项目对话框里有五类项目模板模板:

在这里插入图片描述

常用的只有第⼀类 Application,选择它,在右侧会看到 Qt 应用程序的五个子模板:

  • Qt Widgets Application普通窗体模板,传统基于部件的窗体界面程序。
  • Qt Console ApplicationQt 控制台应用程序。因为 Qt 主要用于图形界面设计,这个控制台项目模板基本不用。
  • Qt for Python在Python下用 LGPL 的许可来开发闭源 Qt 软件。
  • Qt Quick ApplicationQt 提供的⼀种高级用户界面技术,使用它可以方便快速的为移动以及嵌入式设备开发流畅美观的用户界面。Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒子效果以及着色效果等。

选择项目路径

📚 这里需要注意的是我们选择路径的时候一定不要带中文路径,不然在运行程序的时候会出现报错。

请添加图片描述

选择构建工具

在这里插入图片描述

🧑‍💻 这个是构建系统,通过 Qt 写的程序,涉及到一些 “元编程” 技术,是通过代码来生成代码。也就是说 Qt 框架 会在编译的时候,会自动调用一些列的生成工具,基于写的代码,生成一系列的其他 C++代码,最终编译的代码,也是最后生成的代码。

这里我们使用的是 qmake 构建工具 Qt 中的构建工具有三种可供选择,分别是:qmake、CMake、Qbs,下面依次介绍。

  • qmake:qmake 是一个构建工具 (build tool),用于自动生成 Makefile 文件。qmake 支持跨平台构建。qmake 编辑的是一个后缀名为 .pro 的文件 是 Qt 独有的代码构建工具
  • CMake:CMake 是一个跨平台的构建工具。CMake 本身不是一个编译器,其实就是生成一个让编译器能读懂编译流程的文件工具。让 CMake 自动生成构建系统,例如 Makefile 和 Visual Studio 项目文件。CMake 是一个第第三方工具,有自己的文案 C++ 通用的代码构建工具,绝大部分 C++ 开源项目都使用 cmake 管理代码
  • Qbs:Qbs(Qt Build Suite: Qt构建套件) 同 qmake、CMake 一样都是构建工具。Qbs 号称是新一代的构建工具,比gmake 编译速度更快。Qbs 没有绑定 Qt 版本,它从项目文件的高级项目描述中生成一个正确的依赖表。而传统的MakeFile 生成工具如 qmake 和 CMake ,其在生成 MakeFile 文件后将实际的名利交给 Make 工具去执行。
    由每个进程都 Qt官方声明,因市场原因,弃用Qbs。对于 Qt 用户来说,qmake是当前使用最广泛的构建工具,CMake其次。

填写类信息设置界面

在这里插入图片描述

📊 我们使用 Qt Creator 创建项目,会自动的生成一些代码出来,生成出来的代码就包含一个类。此处就是用来选择自动生成的类的父类是谁,有如下三种基类:
在这里插入图片描述
上述三个类之间的关系如下图:
在这里插入图片描述

选择语言和翻译软件

📚 点击 “下⼀步” 进入如下界面:
此处选择的语言是 “汉语”,“英语” 这样的语言,而不是 “编程语言”.

在这里插入图片描述

由于我们不考虑国际化,直接下一步就行

选择 Qt 套件

在这里插入图片描述

📕 默认只有第一个 " Desktop Qt 5.14.2 MinGW 64-bit ",如果安装配置了多个 Qt 套件,就可以都选上。Qt 套件是指 Qt 程序从编译链接到运行环境的全部工具和 Qt 类库的集合,对于 MinGW 版本 Qt 程序生成和调试,至少需要 MinGW 中的编译器 g++(自动调用链接器)、g++ 配套的基础库、调试器 gdb 还有使用 MinGW 环境编译而成的 Qt 类库自身。默认情况下,在上面 Kit Selection 里选中全部套件。

因为当时我们只是选择以其中的一个下载,如果勾选了其他的选项的话,这里就需要进行选择

在这里插入图片描述

选择版本控制系统

点击"下一步"进入项目管理界面; 在项目管理界面可以设置作为子项目,以及加入版本控制系统管理。这两个功能暂时用不到,都用默认的,然后点击“完成"。

💡 ⼤家千万不要觉得⿇烦.事实上在⼤家熟练了之后,创建⼀个项⽬花的时间不会超过10秒钟.

最终效果演示

🔥 通过上述步骤完成了项目的创建,创建完成之后,Qt Creator 会直接进入代码编辑模式,可以看到类似下图界面:
在这里插入图片描述

🦋 认识QtCreator界⾯

左边栏

在这里插入图片描述

在编辑模式下,左边竖排的两个窗口叫做"边栏"。① 是项目文件管理窗口,② 是打开文件列表窗口。

在 QtCreator 菜单"控件" ………->“Show Left Sidebar”,或者使用快捷键:Alt+0 可以控制边栏的显示和隐藏。

  • 边栏里的窗口数目可以增加,边栏子窗口标题栏有一排小按钮,最右边的是关闭按钮,倒数第二个是增加分栏按钮,可以添加多个边栏子窗口。
  • 边栏窗口标题栏第一个控件是组合框,可以选择该子窗口的功能视图类型,目前可以选择8个视图类型:

在这里插入图片描述

在这里插入图片描述

代码编辑区

在这里插入图片描述

  • ①和②:导航按钮"返回"和"前进",这与网页浏览器的前进和后退按钮类似,可以在之前浏览的多个代码文件或一个代码文件里多个位置之间快速切换。

  • ③:标识当前显示的文件是只读还是可写,一般都是可写的。

  • ④:文件类型图标,当前显示文件的类型,这个控件其实是一个菜单按钮,点击可以弹出丰富的文件处理功能菜单。

  • ⑤:打开的文件名,可以在多个打开的文件之间选择切换,与边栏的"打开文档"视图是对应的。

  • 6:关闭当前显示的文档。

  • ⑦:为当前显示的文件添加额外的C++预处理指令,一般用不着。

  • ⑧:选择符号,可以在当前显示的文件里多个函数、类、成员变量等之前快速切换,与边栏"大纲"视图是对应的。

  • ⑨:编辑区光标的行号和列号。

  • ⑩:代码编辑区分栏,可以增加多个编辑器窗口,显示多个打开的文档或显示较大源码文件的多个位置。

  • 行首区:主要用来显示代码行号,以及调试断点标志和代码书签标志。右击行首区可以弹出右键菜单,菜单里可以切换书签、编辑书签以及设置或取消断点

  • 同一行是既可以打断点也可以设置书签的,二者不冲突,其实它们根本就没关系。单击行号前面的浅灰色空白区可以直接打断点,再次单击可以取消断点,另外也可以用快捷键 F9 设置或取消断点。代码书签一般用右键菜单来设置,也可以用快捷键 Ctrl+M 设置或取消书签

  • 编辑区:写代码的区域

UI 设计页面

📚 双击 widget.ui 文件,QtCreator 会自动进入设计模式,可以对图形界面进行可视化编辑

在这里插入图片描述

  1. 组件选择窗口:组件选择窗口分为多个组,如 Layouts、Buttons、DisplayWidgets 等,界面设计的常见组件都可以在组件选择窗口中找到。
  2. UI 设计窗口:如果要将某个组件放置到该窗口上时,从组件选择窗口上拖放一个组件到窗体上即可。
  3. 动作编辑窗口:动作编辑窗口包括 Action Editor 以及 Signals 和 Slots 编辑器。 Action Editor 主要是用来新建 Action,并且通过拖拽的动作,将新建好的Action 添加到菜单栏和工具上,Signals和 Slots 编辑器用于可视化地进行信号与槽的关联。
  4. 对象浏览窗口:用树状视图显示窗体上各组件之间的布局包含关系,视图有两列,显示每个组件的对象名称(ObjectName)和类名称。
  5. 属性设置窗口:显示某个选中的组件或窗体的各种属性及其取值,可以在属性设置窗口里修改这些属性的值。
    在这里插入图片描述
    左下角一共有四个按钮,下面分别介绍一下:
  • 第一个按钮是选择构建项目使用的 Qt 套件和构建目标程序的类型(Debug或 Release)
    对于第一个按钮,默认的是Debug,构建的是 Debug 类型的目标程序。如果需要构建 Release 版目标程序,点开左下角第一个按钮:
    在这里插入图片描述
    这里有三种构建模式

在这里插入图片描述
上图是针对项目只用到单一 Qt 套件的,如果之前配置了多个 Qt套件,看到的类似下图:

在这里插入图片描述
🔥 如果项目配置了多个可用的 Qt 套件,点开左下角第一个按钮后,会看到各个套件以及构建类型,如果要切换 Qt 套件或构建类型,直接选中相应条目,然后点击运行按钮就行了。如果构建和运行时没出错,就会显示出构建好的目标程序界面。

  • 第二个是运行按钮,快捷键是 Ctrl + R,如果还没构建项目或刚修改了代码,直接点击运行的话,QtCreator 会自动构建生成新的目标程序并运行。
  • 第三个是调试按钮,快捷键是 F5。调试程序之前,QtCreator 会自动构建生成最新的目标程序,并进入调试模式。
  • 第四个是构建按钮,快捷键是 Ctrl + B,只构建最新的目标程序,但不运行。

🦋 3.4 项目代码解析

📚 我们创建好一个项目后,Qt会自动给我们生成一些代码。

在这里插入图片描述

widget.h

在 Qt 中,如果要使用 信号与槽 (signal和 slot) 的机制 就必须加入 O OBJECT 宏;

  • Ui::Widget *ui(process switch); 这个指针是用前面声明的 namespace Ui 里的 Widget 类定义的,所以指针 ui 是指向可视化设计的界面,后面要访问界面上的组件,都需要通过这个指针 ui 去访问。

在这里插入图片描述

main.cpp

📚 使用 QtCreator新建任意⼯程之后,main.cpp 文件中都会自动生成如下代码:
在这里插入图片描述

widget.cpp

在这里插入图片描述

widget.ui

🎈 widget.ui 是窗体界面定义文件,是一个 XML 文件,定义了窗口上的所有组件的属性设置、布局,及其信号与槽函数的关联等(和 HTML一样都是使用标签来表示数据)。用 UI 设计器可视化设计的界面都由 Qt 自动解析,并以 XML 文件的形式保存下来。在设计界面时,只需在 UI 设计器里进行可视化设计即可,而不用管 widget.ui文件是怎么生成的,进一步的 qmake 会调用相关工具,依据这个 xml 进一步生成 C++ 代码,从而把完整的的界面代码构造出来

在这里插入图片描述

.pro 工程文件

🔥 工程新建好之后,在工程目录列表中有一个后缀为".pro"的文件,".pro"文件就是工程文件(project),它是 qmake 自动生成的用于生产 Makefile 的配置文件。
在这里插入图片描述
./pro 的写法如下:

  1. 注释:从"#"开始,到这一行结束
  2. QT += core gui // Qt 包含的模块 Qt5 包含的模块如下图所示

在这里插入图片描述

  1. greaterThan(QT_MAJOR_VERSION,4); QT += widgets 这条语句的含义是,如果 QT MAJOR_VERSION 大于 4 也就是当前使用的 Qt5 及更高版本)需要增加 widgets 模块。如果项目仅需支持 Qt5 ,也可以直接添加 “QT += widgets” 一句。不过为了保持代码兼容 ,最好还是按照 QtCreator 生成的语句编写。
  2. 指定生成的应用程序名: TARGET=QtDemo4
  3. TEMPLATE = app:模板。告诉 qmake 为这个应用程序生成哪种 Makefile。下面是可供选择的模板:
  • app:建立一个应用程序的 Makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
  • lib:建立一个库的 Makefile。
  • vcapp:建立一个应用程序的 VisualStudio 项目文件。
  • vclib:建立一个库的 VisualStudio 项目文件。
  • subdirs:这是一个特殊的模板,它可以创建一个能够进入特定目录的 Makefile 并且为它调用 make 的Makefile.
  1. 工程中包含的源文件:SOURCES+=main.cpp / widget.cpp6.
  2. 工程中包含的头文件:HEADERS += widget.h
  3. 工程中包含的资源文件:RESOURCES+=painter.qrc
  4. 工程中包含的 “ui” 设计文件:FORMS += widget.ui

Qt 可选模块如下

在这里插入图片描述

🦋 中间文件

📚 以上的.h .cpp .ui .pro都是一些源文件,但是如果编译运行 Qt 项目后,构建构成中还会生成一些中间文件。

在这里插入图片描述

在这里插入图片描述
这里Qt还会创建一个目录,这个目录下生成的是一些临时文件。

🦁 编译 Qt 程序,还是会用到 Makefile 只不过这个 Makefile 不需要手动写, 而是 qmake自动生成的.
在这里插入图片描述
🦁 而这里的 ui_widget.h 就是我们编译运行成功后 Qt 给我我们生成的代码。而这个代码就会在 widget.cpp 中的 setupUi 中生成界面的具体细节

四:🔥 共勉

😋 以上就是我对 【Qt】新世界大门:概述 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述

相关文章:

【Qt】:概述(下载安装、认识 QT Creator)

🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 介绍 🦋 什么是 QT🦋 QT 发展史🦋 Qt版本🦋 QT 优点 一:🔥 搭建Qt开发环境 &#x1f9…...

Netty源码解析之异步处理(二):盛赞Promise中的集合设计

前言 在阅读Netty源码的过程中,我越来越相信一句话:“Netty的源码非常好,质量极高,是Java中质量最高的开源项目之一”。如果认真研究,会有一种遍地黄金的感觉。 本篇文件我将记录一下鄙人在Promise的实现类DefaultPr…...

Spring Boot 的约定优于配置,你的理解是什么?

“约定优于配置” 是 Spring Boot 极为重要的设计理念,它极大地简化了 Spring 应用的开发流程,下面从多个方面详细解释这一理念: 减少配置复杂性 传统开发的痛点 在传统的 Spring 开发里,配置工作相当繁琐。以配置 Spring MVC …...

图形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan简介

1.Skia —— 2D 图形库 Skia 是一个 2D 图形库,它的作用是为开发者提供一个高层次的绘图接口,方便他们进行 2D 图形渲染(比如绘制文本、形状、图像等)。Skia 本身不直接管理 GPU 或进行底层的渲染工作,而是通过 底层图…...

git使用,注意空格

第一节 安装完成后,找个目录用于存储,打开目录右击选择git bash here 命令1 姓名 回车 git config --global user.name "li" 命令2 邮箱 回车 git config --global user.email "888163.com" 命令3 初始化新仓库,下载克隆 回…...

以用户为中心,汽车 HMI 界面设计的创新之道

在汽车智能化飞速发展的当下,汽车 HMI(人机交互界面)成为连接人与车的关键桥梁。如何打造出优秀的 HMI 界面?答案是以用户为中心,探索创新之道。 用户需求是汽车 HMI 界面设计的指南针。在设计前期,深入调…...

CentOS安装Docker,Ubuntu安装Docker,Docker解决方案

文章目录 CentOS7安装DockerUbuntu修改Docker镜像源docker设置容器自动启动启动时加--restartalways如果已经过运行的项目docker compose设置容器自启动 docker file修改时区docker在容器执行命令简单粗暴的办法安装curl docker compose命令安装docker compose Docker WEB 图形…...

c#中“事件-event”的经典示例与理解

在C#编程语言中,事件(Event)是一个非常重要的概念,它提供了一种松耦合的方式,让对象间能够通知彼此,而无需直接联系。事件的使用可以让我们的代码更加灵活、可扩展且易于维护。 事件可以视作委托的实例&…...

git bash在github的库中上传或更新本地文件

一、将本地文件上传到 GitHub 仓库 1. 创建 GitHub 仓库 如果你还没有在 GitHub 上创建仓库,首先需要创建一个新的仓库: 登录到 GitHub。点击右上角的 按钮,选择 New repository。给你的仓库起个名字,并选择 Public 或 Privat…...

【编程实践】vscode+pyside6环境部署

1 PySide6简介 PySide6是Qt for Python的官方版本,支持Qt6,提供Python访问Qt框架的接口。优点包括官方支持、LGPL许可,便于商业应用,与Qt6同步更新,支持最新特性。缺点是相比PyQt5,社区资源较少。未来发展…...

vue 文件下载(导出)excel的方法

目前有一个到处功能的需求,这是我用过DeepSeek生成的导出(下载)excel的一个方法。 1.excel的文件名是后端生成的,放在了响应头那里。 2.这里也可以自己制定文件名。 3.axios用的是原生的axios,不要用处理过的&#xff…...

服务器延迟给视频网站造成的影响

在数字化时代中,网络视频已经成为人们日常娱乐和获取信息的重要平台,网络视频的流畅性会影响着用户的体验度,那么,当服务器出现延迟会对视频网站造成哪些影响呢?本文就来共同了解一下吧! 当所使用的服务器由…...

django上传文件

1、settings.py配置 # 静态文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上传文件 # 定义一个视图函数,该函数接收一个 request 参数 from django.shortcuts import render # 必备引入 import json from django.views.decorators.http i…...

Mysql数据库

一.数据定义语言DDL 一.概述 DDL用于定义和管理数据库的结构 DDL关键字:1.CREATE; 2.ALTER; 3.DROP 二.SQL命名规定和规范 1.标识符命名规则 2.标识符命名规范 三.库管理 1. CREATE DATABASE 数据库名; 2. CREATE DATABASE IF NOT EXISTS 数据库名; 3. CREATE…...

机器学习 - 大数定律、可能近似正确学习理论

一、大数定律: 大数定律是概率论中的一个基本定理,其核心思想是:当独立重复的随机试验次数足够大时,样本的平均值会趋近于该随机变量的期望值。下面从直观和数学两个角度来说明这一概念: 1. 直观理解 重复试验的稳定…...

Kotlin 2.1.0 入门教程(十七)接口

接口 接口可以包含抽象方法的声明,也可以包含方法的实现。 接口与抽象类的不同之处在于,接口无法存储状态。接口可以拥有属性,但这些属性要么必须是抽象的,要么就得提供访问器的实现。 接口使用 interface 关键字来定义&#x…...

USB Flash闪存驱动器安全分析(第一部分)

翻译原文链接:Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结:文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行,他在2022年初发现了几个安全漏…...

报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant

与 TEN 相聚在「LET’S VISION 2025」大会,欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊,功能新鲜上线,线下首波体验! 📅 TEN 展位:2025年3月1日-2日 TEN workshop&#x…...

常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构

文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…...

微信小程序的制作

制作微信小程序的过程大致可以分为几个步骤:从环境搭建、项目创建,到开发、调试和发布。下面我会为你简要介绍每个步骤。 1. 准备工作 在开始开发微信小程序之前,你需要确保你已经完成了以下几个步骤: 注册微信小程序账号&…...

C# 特性 学习记录

在C#中,特性(Attribute)是一种用于向代码元素(如类、方法、属性等)添加元数据的机制。特性本身不会直接影响代码的执行,但它们可以提供额外的信息,这些信息可以在运行时通过反射(Ref…...

DBeaver clickhouse 时区不对 时间少了8小时

选择DataBase选择Driver Manager选择clickhouse数据库点中之后,选择编辑添加两个全局属性 use_server_time_zone use_time_zone 鼠标移动到User Properties上,右键即可添加一列空白 然后断开重连...

如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析

CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…...

Express 中间件是什么

在 Express 里,中间件是具备访问请求对象(req)、响应对象(res)以及应用程序请求-响应循环中的下一个中间件函数(一般用next表示)的函数。 一、中间件的定义与调用顺序 在 Express 应用中&…...

【做一个微信小程序】校园地图页面实现

前言 上一个教程我们实现了小程序的一些的功能,有背景渐变色,发布功能有的呢,已支持图片上传功能,表情和投票功能开发中(请期待)。下面是一个更高级的微信小程序实现,包含以下功能:…...

(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念

目录 前言与导论 碎碎念 所以,我到底需要知道哪些东西呢 从一些基础的概念入手 常见的工具和说法 ST公司 MDK5 (Keil5) CubeMX 如何使用MDK5的一些常用功能 MDK5的一些常见的设置 前言与导论 非常感谢2301_77816627-CSDN博客的提问,他非常好奇…...

java nio 原理 非阻塞IO Netty

一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO和它背后的原理之后,去查看Netty的源码就有…...

【ClickHouse】Ubuntu下离线安装ClickHouse数据库并使用DBeaver连接

目录 0. 安装前准备1 安装ClickHouse1.1 下载安装包1.2 离线安装1.3 配置密码1.4 启动ClickHouse服务 2 DBeaver连接配置2.1 下载ClickHouse驱动2.2 DBeaver配置2.2.1 配置主要参数2.2.2 配置驱动 2.3 常见问题处理2.3.1 修改远程登录配置2.3.2 更新驱动配置 0. 安装前准备 有…...

vue2打包带路径的项目,刷新404问题解决

问题描述 Vue 2 项目打包时设置了 publicPath: /web/,并通过 Nginx 配置访问 http://ip/web 时可以正常加载首页,但刷新页面时出现 404 错误 原nginx的配置 location /web {alias /www/dist; # 静态文件地址try_files $uri $uri/ /index.html;index i…...

【计算机视觉】文本识别

计算机视觉,广义的文本识别是指对输入的图像进行分析处理,识别出图像中的文字信息,这里的图像可以使传统的文档图像,也可以是现实世界中的场景图像。 简介 无论是传统方法还是基于深度深度学习的方法,完整的文本识别…...

Vue和React的区别

组件开发方式&#xff1a; Vue 使用单文件组件&#xff08;SFC&#xff09;, HTML, JS 和 CSS 在一个文件内实现 <template><div class"my-component"><!-- HTML模板 --></div> </template><script> export default {// JavaScr…...

STM32 是什么?同类产品有哪些

STM32 是什么&#xff1f; STM32 是由意法半导体&#xff08;STMicroelectronics&#xff09;推出的基于 ARM Cortex-M 内核 的 32 位微控制器&#xff08;MCU&#xff09;系列。它专为高性能、低功耗的嵌入式应用设计&#xff0c;广泛应用于以下领域&#xff1a; 工业控制&am…...

Git学习使用笔记

目录 一、基本介绍 1.1 版本控制 1.2 版本控制软件的基础功能 1.3 多人协作开发/集中式版本控制 1.4 分布式版本控制 二、Git安装 2.1下载git 2.2 使用Github Desktop软件 2.2.1 创建本地仓库 2.2.2 删除本地仓库 2.2.3 仓库文件操作 2.2.4 多人协作 2.2.4.1 分…...

Bash 中的运算方式

目录 概述&#xff1a; 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc&#xff08;计算器&#xff0c;支持浮点数&#xff09; 6. awk&#xff08;强大的文本处理工具&#xff0c;也可计算&#xff09; 概述&#xff1a; Bash 本身只支持整数运算&am…...

NLP Word Embeddings

Word representation One-hot形式 在上一周介绍RNN类模型时&#xff0c;使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的&#xff0c;算法很难学习到单词之间的关系。 比如下面的例子&#xff0c;即使语言模型已经知道orange juice是常用组合词&#xf…...

Unity UI个人总结

个人总结&#xff0c;太简单的直接跳过。 一、缩放模式 1.固定像素大小 就是设置一个100x100的方框&#xff0c;在1920x1080像素下在屏幕中长度占比1/19&#xff0c;在3840x2160&#xff0c;方框在屏幕中长度占比1/38。也就是像素长款不变&#xff0c;在屏幕中占比发生变化 2.…...

开发基础(8):鸿蒙图表开发

mpchart mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。 柱状图 导入import {BarChart, …...

Vue的简单入门 一

声明&#xff1a;本版块根据B站学习&#xff0c;创建的是vue3项目&#xff0c;用的是vue2语法风格&#xff0c;仅供初学者学习。 目录 一、Vue项目的创建 1.已安装15.0或更高版本的Node.js 2.创建项目 二、 简单认识目录结构 三、模块语法中的指令 1.v-html 1.文本插值…...

vs2022支持.netframework4.0

下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884...

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用&#xff0c;提高可维护性。 —这个有两个方案&#xff1a;一个是二次封装一个是实例化。&#xff08;设置一些公共的参数&#xff0c;然后进行请求&#xff09; 为什么可以解决代码的复用&#xff1a; 这是…...

前端包管理器的发展以及Npm、Yarn和Pnpm对比

在现代前端开发中&#xff0c;包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展&#xff0c;开发者经历了从 npm 一统天下到 Yarn 挑战格局&#xff0c;再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器&#xff08;npm/Yarn/pnpm&#xff09;进行全方位…...

城电科技| 光伏太阳花:让绿色能源随处绽放

在追求绿色可持续发展的今天&#xff0c;清洁能源设备不断涌现&#xff0c;城电科技的光伏太阳花便是其中的佼佼者。它不仅造型独特美观&#xff0c;更凭借出色的性能&#xff0c;在多个场景中都能发挥重要作用。那么&#xff0c;这款神奇的光伏太阳花究竟适合安装在哪里呢&…...

LVS集群(DR/NAT)

特性NAT 模式DR 模式工作原理Director 修改请求/响应的 IP 地址和端口&#xff0c;流量双向经过 DirectorDirector 仅修改请求的 MAC 地址&#xff0c;响应由 Real Server 直接返回客户端性能较低&#xff08;需处理双向流量&#xff0c;易成瓶颈&#xff09;高&#xff08;仅处…...

保姆级GitHub大文件(100mb-2gb)上传教程

GLF&#xff08;Git Large File Storage&#xff09;安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...

linux 安装ftp

1、安装vsftpd sudo yum install -y vsftpd 2、运行以下命令&#xff0c;启动FTP服务&#xff0c;并设置开机自启动。 sudo systemctl start vsftpdsudo systemctl enable vsftpd 3、运行以下命令&#xff0c;查看FTP服务监听的端口。 sudo netstat -antup | grep ftp 出现…...

DDoS技术解析

这里是Themberfue 今天我们不聊别的&#xff0c;我们聊聊著名的网络攻击手段之一的 DDoS&#xff0c;看看其背后的技术细节。 DoS 了解 DDoS 前&#xff0c;先来讲讲 DoS 是什么&#xff0c;此 DoS 而不是 DOS 操作系统啊。1996年9月6日&#xff0c;世界第三古老的网络服务提供…...

移远通信边缘计算模组成功运行DeepSeek模型,以领先的工程能力加速端侧AI落地

近日&#xff0c;国产大模型DeepSeek凭借其“开源开放、高效推理、端侧友好”的核心优势&#xff0c;迅速风靡全球。移远通信基于边缘计算模组SG885G&#xff0c;已成功实现DeepSeek模型的稳定运行&#xff0c;并完成了针对性微调。 目前&#xff0c;该模型正在多款智能终端上进…...

Linux | 进程相关概念(进程、进程状态、进程优先级、环境变量、进程地址空间)

文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识fork の 头文件与返回值fork函数的调用逻辑和底层逻辑 3、进程状态3.1状态3.2进程状态查看命令3.2.1 ps命令3.2.…...

站群服务器和普通服务器有哪些不同之处?

站群服务器是一个集中管理工具&#xff0c;可以允许网站管理员同时管理多个网站&#xff0c;但是不要管理员登录每一个网站的后台&#xff0c;在站群模式下&#xff0c;网站管理员通过一个或者多个服务器来托管大量的子站点&#xff0c;可以支持大规模网站的集中管理和优化。 普…...