【Qt】Qt 信号与槽机制全解析

目录
- `一.信号和槽概述`
- `信号的本质`
- 槽的本质
- `信号和槽的使⽤`
- `连接信号和槽`
- `查看内置信号和槽`
- `通过 Qt Creator ⽣成信号槽代码`
- `⾃定义信号和槽`
- `带参数的信号和槽`
- `信号与槽的断开`
- `Qt4 版本信号与槽的连接`
- `使⽤ Lambda 表达式定义槽函数`
一.信号和槽概述
在 Qt 中,用户和控件的每次交互过程
称为⼀个事件。⽐如 “用户点击按钮” 是⼀个事件,“用户关闭窗⼝” 也是⼀个事件。每个事件都会发出⼀个信号
,例如用户点击按钮会发出 “按钮被点击” 的信号,⽤⼾关闭窗⼝会发出 “窗⼝被关闭” 的信号。
Qt 中的所有控件都具有接收信号的能⼒,⼀个控件还可以接收多个不同的信号。对于接收到的每
个信号,控件都会做出相应的响应动作。例如,按钮所在的窗⼝接收到 “按钮被点击” 的信号后,会做出 “关闭⾃⼰” 的响应动作;再⽐如输⼊框自己接收到 “输⼊框被点击” 的信号后,会做出 “显⽰闪烁的光标,等待用户输⼊数据” 的响应动作。在 Qt 中,对信号做出的响应动作就称之为槽
。
信号和槽是 Qt 特有的消息传输机制,它能将相互独⽴的控件关联起来。⽐如,“按钮” 和 “窗⼝”
本⾝是两个独⽴的控件,点击 “按钮” 并不会对 “窗⼝” 造成任何影响。通过信号和槽机制,可以将 “按钮” 和 “窗⼝” 关联起来,实现 “点击按钮会使窗⼝关闭” 的效果。
信号的本质
信号是由于用户对窗⼝或控件进⾏了某些操作,导致窗⼝或控件产⽣了某个特定事件,这时 Qt 对应的窗⼝类会发出某个信号,以此对用户操作做出反应。因此,信号的本质就是事件
。如:
- 按钮单击、双击,窗⼝刷新,⿏标移动、⿏标按下、⿏标释放, 键盘输⼊等
那么在 Qt 中信号是通过什么形式呈现给使⽤者的呢?
- 我们对哪个窗⼝进⾏操作, 哪个窗⼝就可以捕捉到这些被触发的事件。
- 对于使⽤者来说触发了⼀个事件我们就可以得到 Qt 框架给我们发出的某个特定信号。
信号的呈现形式就是函数
, 也就是说某个事件产⽣了, Qt 框架就会调⽤某个对应的信号函数, 通知使⽤者。
在 Qt 中信号的发出者是某个实例化的类对象。
槽的本质
槽(Slot)就是对信号响应的函数
。槽就是⼀个函数,与⼀般的 C++ 函数是⼀样的,可以定义在
类的任何位置( public、protected 或 private ),可以具有任何参数,可以被重载,也可以被直接调⽤(但是不能有默认参数)。槽函数与⼀般的函数不同的是:槽函数可以与⼀个信号关联,当信号被发射时,关联的槽函数被⾃动执⾏
。
说明
-
信号和槽机制底层是通过函数间的相互调⽤实现的
。每个信号都可以⽤函数来表⽰,称为信号函数
;每个槽也可以⽤函数表⽰,称为槽函数
。例如: “按钮被按下” 这个信号可以⽤ clicked() 函数表⽰,“窗⼝关闭” 这个槽可以⽤ close() 函数表⽰,假如使⽤信号和槽机制实现:“点击按钮会关闭窗⼝” 的功能,其实就是 clicked() 函数调⽤ close() 函数的效果。 -
信号函数和槽函数通常位于某个类中,和普通的成员函数相⽐,它们的特别之处在于:
- 信号函数⽤ signals 关键字修饰,槽函数⽤ public slots、protected slots 或者 private slots 修饰。signals 和 slots 是 Qt 在 C++ 的基础上扩展的关键字,专⻔⽤来指明信号函数和槽函数;
信号函数只需要声明,不需要定义(实现),⽽槽函数需要定义(实现)
。
-
💡 信号函数的定义是 Qt ⾃动在编译程序之前⽣成的. 编写 Qt 应⽤程序的程序猿⽆需关注.这种⾃动⽣成代码的机制称为 元编程 (Meta Programming) .
信号和槽的使⽤
连接信号和槽
在 Qt 中,QObject 类
提供了⼀个静态成员函数 connect() ,该函数专⻔⽤来关联指定的信号函数和槽函数。
💡QObject 是 Qt 内置的⽗类
,Qt 中提供的很多类都是直接或者间接继承⾃ QObject。
connect() 函数原型:
connect (const QObject *sender, const char * signal ,const QObject * receiver , const char * method , Qt::ConnectionType type = Qt::AutoConnection )
参数说明:
- sender:信号的发送者;
- signal:发送的信号(信号函数);
- receiver:信号的接收者;
- method:接收信号的槽函数;
- type: ⽤于指定关联⽅式,默认的关联⽅式为 Qt::AutoConnection,通常不需要⼿动设定。
代码⽰例: 在窗⼝中设置⼀个按钮,当点击 “按钮” 时关闭 “窗⼝” .
查看内置信号和槽
系统⾃带的信号和槽通常是通过 “Qt 帮助⽂档” 来查询。如上述⽰例,要查询 “按钮” 的信号,在帮助⽂档中输⼊:QPushButton,
- ⾸先可以在 “Contents” 中寻找关键字 signals,
- 如果没有找到, 继续去⽗类中查找. 因此我们去他的⽗类 QAbstractButton 中继续查找关键字signals。

Contents里面们没有Signals关键字,去父类查找,点击父类。
点击Signals,就找到clicked()信号函数了。
查找close槽函数也是类似的方法,这里不赘述。
通过 Qt Creator ⽣成信号槽代码
代码⽰例: 在窗⼝中设置⼀个按钮,当点击 “按钮” 时关闭 “窗⼝”
1. 双击 widget.ui ⽂件,进⼊ UI 设计界⾯;

2. 在 UI 设计窗⼝中拖⼊⼀个 “按钮” ,并且修改 “按钮” 的名称及字体⼤⼩等;

3. 可视化⽣成槽函数;

4. 当单击 “转到槽…” 之后,出现如下界⾯:对于按钮来说,当点击时发送的信号是:clicked(),所以此处选择:clicked()

5. ⾃动⽣成槽函数原型框架;
(1) 在 “widget.h” 头⽂件中⾃动添加槽函数的声明;
- ⾃动⽣成槽函数的名称有⼀定的规则。槽函数的命名规则为on_XXX_SSS,其中:
1、以 " on " 开头,中间使⽤下划线连接起来;
2、" XXX " 表⽰的是对象名(控件的 objectName 属性)。
3、“SSS " 表⽰的是对应的信号。 如:” on_pushButton_clicked() " ,pushButton 代表的是对象名,clicked 是对应的信号。
💡 按照这种命名⻛格定义的槽函数, 就会被 Qt ⾃动的和对应的信号进⾏连接.但是咱们⽇常写代码的时候, 除⾮是 IDE ⾃动⽣成, 否则最好还是不要依赖命名规则, ⽽是显式使⽤ connect 更好.
- ⼀⽅⾯显式 connect 可以更清晰直观的描述信号和槽的连接关系.
- 另⼀⽅⾯也防⽌信号或者槽的名字拼写错误导致连接失效.

(2)在 “widget.cpp” 中⾃动⽣成槽函数定义.

在槽函数函数定义中添加要实现的功能. 实现关闭窗⼝的效果.
void Widget::on_pushButton_clicked()
{this->close();
}
⾃定义信号和槽
基本语法
在 Qt 中,允许⾃定义信号的发送⽅以及接收⽅,即可以⾃定义信号函数和槽函数。但是对于⾃定义的信号函数和槽函数有⼀定的书写规范。
⾃定义信号函数书写规范
- ⾃定义信号函数必须写到 “signals” 下;
返回值为 void,只需要声明,不需要实现
;可以有参数,也可以发⽣重载
;
⾃定义槽函数书写规范
- 早期的 Qt 版本要求槽函数必须写到 “public slots” 下,但是现在⾼级版本的 Qt 允许写到类的"public" 作⽤域中或者全局下;
返回值为 void
,需要声明,也需要实现;可以有参数,可以发⽣重载
;
发送信号
- 使⽤
"emit"
关键字发送信号 。“emit” 是⼀个空的宏。“emit” 其实是可选的,没有什么含义,只是为了提醒开发⼈员。
示例1
1、在 widget.h 中声明⾃定义的信号和槽,如图所⽰;

2、在 widget.cpp 中实现槽函数,并且关联信号和槽
注意
:图中的 ① 和 ② 的顺序不能颠倒。
- 原因是, ⾸先关联信号和槽,⼀旦检测到信号发射之后就会⽴⻢执⾏关联的槽函数。反之,若先发射信号,此时还没有关联槽函数,当信号发射之后槽函数不会响应

⽰例2:当⽼师说 "上课了",学⽣们就 "开始学习"。
1、在源⽂件中新建两个类,⼀个是⽼师类,⼀个是学⽣类;⾸先选中项⽬名称,⿏标右键 -----> “Add New…”




添加完成之后,项⽬⽬录新增⽂件如下:

2. 在 teacher.h 中声明信号函数:

3. 在 student.h 中声明槽函数:

4. 在 student.cpp 中实现槽函数:

5. 在 widget.h 中实例化 “⽼师类对象” 和 “学⽣类对象”;

6. 在 widget.cpp 中连接⾃定义信号和槽;

7. 程序输出

带参数的信号和槽
Qt 的信号和槽也⽀持带有参数, 同时也可以⽀持重载.
此时信号触发, 调⽤到槽函数的时候, 信号函数中的实参就能够被传递到槽函数的形参当中.
⽰例1:重载信号槽
(1)在 “widget.h” 头⽂件中声明重载的信号函数以及重载的槽函数;如下图所⽰:

(2)在 “Widget.cpp” ⽂件实现重载槽函数以及连接信号和槽。

我遇到的一个错误:

在 Qt 中,信号(signal)和槽(slot)机制不支持直接通过函数指针进行重载的连接,因为信号和槽的连接需要明确的函数签名
。在我的代码中,我尝试对 MySignal 和 HandlerSignal 进行重载,但在使用 QObject::connect 时,没有指定具体要连接哪个重载版本
,这会导致编译错误。
- 信号重载:Qt 允许信号重载,但 QObject::connect 需要知道具体连接哪个重载版本。
- 槽重载:同样,槽函数重载时,QObject::connect 无法直接解析要连接哪个版本。
- emit 关键字:emit MySignal(“hello”); 试图发射一个带参数的信号,但 MySignal 也被声明为无参数版本,这会导致混淆。
纠正:



运行结果:

其实信号的参数个数可以多于槽函数的参数个数
,但是槽的参数个数不能多于信号参数个数.但是实际开发中最好还是保持参数个数也能匹配⼀致.
⽰例3:
1、在 “widget.h” 头⽂件中声明信号和槽函数;

2、在 “widget.cpp” ⽂件中实现槽函数以及连接信号和槽;

1. ⼀对⼀
主要有两种形式,分别是:⼀个信号连接⼀个槽 和 ⼀个信号连接⼀个信号。
(1)⼀个信号连接⼀个槽
上面的例子演示过,不赘述。
(2)⼀个信号连接另⼀个信号
作用:实现信号的转发或级联
。通过这种方式,当一个信号被触发时,它会自动触发另一个信号,从而将事件或状态的变化传播到更广泛的组件或逻辑中。
- 如下面的示例中,将clicked( )信号与自定义MySIgnal信号关联,当clicked( )信号发生时,会自动触发自定义MySIgnal信号。

2. ⼀对多
⼀个信号连接多个槽。这种设计模式允许一个事件(信号)触发多个响应(槽),从而实现灵活的事件处理。
以下是一个常见的应用场景:
- 假设有一个按钮,当按钮被点击时,需要同时更新界面上的标签、记录日志,以及执行某个后台任务。可以通过将按钮的 clicked 信号连接到多个槽来实现。
⼀对多的示例:

3. 多对⼀
多个信号连接⼀个槽函数
- 示例场景:在智能家居系统中,用户可能通过多个设备(如手机APP、智能音箱、物理按键)控制同一台家电(如灯光、空调)。为了实现统一的控制逻辑,系统需要设计多对一的信号与槽机制:多个控制设备的信号连接到一个槽函数,由槽函数统一处理控制逻辑。

信号与槽的断开
使⽤ disconnect 即可完成断开,disconnect 的⽤法和 connect 基本⼀致.
示例:
Qt4 版本信号与槽的连接
Qt4 中的 connect ⽤法和 Qt5 相⽐是更复杂的. 需要搭配SIGNAL
和 SLOT
宏来完成.⽽且缺少必要的函数类型的检查. 使代码更容易出错.
⽰例:
(1)在 “widget.h” 头⽂件中声明信号和槽

(2)在 “widget.cpp” ⽂件中实现槽函数以及连接信号与槽;

Qt4 版本信号与槽连接的优缺点:
- 优点:参数直观;
- 缺点:参数类型不做检测;

使⽤ Lambda 表达式定义槽函数
Qt5 在 Qt4 的基础上提⾼了信号与槽的灵活性,允许使⽤任意函数作为槽函数。
但如果想⽅便的编写槽函数,⽐如在编写函数时连函数名都不想定义,则可以通过 Lambda表达式 来达到这个⽬的。
Lambda表达式 是 C++11 增加的特性。C++11 中的 Lambda表达式 ⽤于定义并创建匿名的函数对象,以简化编程⼯作。
这里给出示例,lambda表达式不做详解,在专栏【C++学习笔记中–C++11新特性有讲解】。
这里需要注意的是:
- 要在
".pro"
⽂件中添加:CONFIG += C++11
,因为 Lambda表达式 是 C++11 标准提出的。Qt5 以上的版本⽆需⼿动添加,在新建项⽬时会⾃动添加。
简单示例:

- 缺点:
效率较低
与回调函数相⽐,信号和槽稍微慢⼀些,因为它们提供了更⾼的灵活性,尽管在实际应⽤程序中差别不⼤。通过信号调⽤的槽函数⽐直接调⽤的速度慢约10倍(这是定位信号的接收对象所需的开销;遍历所有关联;编组/解组传递的参数;多线程时,信号可能需要排队),这种调⽤速度对性能要求不是⾮常⾼的场景是可以忽略的,是可以满⾜绝⼤部分场景。
相关文章:
【Qt】Qt 信号与槽机制全解析
🍑个人主页:Jupiter. 🚀 所属专栏:QT 欢迎大家点赞收藏评论😊 目录 一.信号和槽概述信号的本质槽的本质 信号和槽的使⽤连接信号和槽查看内置信号和槽通过 Qt Creator ⽣成信号槽代码⾃定义信号和槽带参数的信号和槽信…...
【QT】 QT定时器的使用
QT定时器的使用 1. QTimer介绍(1)QTimer的使用方法步骤示例代码1:定时器的启动和关闭现象:示例代码2:定时器每隔1s在标签上切换图片现象: (2)实际开发的作用 2.日期 QDate(1)主要方法 3.时间 QTime(1)主要方…...
golang使用stdio与子进程进行通信
在使用Cline调用本地MCP Server的时候,使用的是STDIO模式,也就是Cline启动一个子进程来运行MCP Server,然后通过STDIO来进行通信。这种方式即高效又安全。 import ("bufio""fmt""io""os/exec""…...
无服务器架构(Serverless)在Web开发与云原生中的应用研究
无服务器架构(Serverless)在Web开发与云原生中的应用研究 摘要 无服务器架构(Serverless Architecture)作为一种新兴的云计算范式,通过抽象化服务器管理,使开发者能够专注于业务逻辑的实现,而无需关注底层基础设施的运维。本文从研究学者的角度,探讨了无服务器架构的核…...
第IV部分有效应用程序的设计模式
第IV部分有效应用程序的设计模式 第IV部分有效应用程序的设计模式第23章:应用程序用户界面的架构设计23.1设计考量23.2示例1:用于非分布式有界上下文的一个基于HTMLAF的、服务器端的UI23.3示例2:用于分布式有界上下文的一个基于数据API的客户…...
java开发中的设计模式之单例模式
Java开发中的设计模式之单例模式 在软件开发中,设计模式是解决常见问题的最佳实践,单例模式(Singleton Pattern)作为一种创建型设计模式,能够确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点…...
Vue 高级技巧深度解析
Vue 高级技巧深度解析 mindmaproot(Vue2高级技巧)组件通信EventBusprovide/inject$attrs/$listeners性能优化虚拟DOM优化函数式组件按需加载状态管理Vuex模块化持久化存储严格模式高级指令自定义指令动态组件异步组件渲染控制作用域插槽渲染函数JSX支持一、组件通信的进阶之道 …...
JVM:JVM与Java体系结构
一、JVM 基础概念 虚拟机可分为两类 一类是系统虚拟机,用于模拟计算机系统,常见的软件有 Virtual Box、VMware 等。它们能创建虚拟的计算机系统,就如同在我们的计算机中又安装了一台计算机另一类是程序虚拟机,例如 JVM࿰…...
大模型预标注和自动化标注在OCR标注场景的应用
OCR,即光学字符识别,简单来说就是利用光学设备去捕获图像并识别文字,最终将图片中的文字转换为可编辑和可搜索的文本。在数字化时代,OCR(光学字符识别)技术作为处理图像中文字信息的关键手段,其…...
JVM 垃圾回收
垃圾回收 在 C/C 没有自动垃圾回收机制的语言中,一个对象如果不再被使用,则需要手动释放,否则就会出现内存泄漏(不再使用的对象未被系统回收而导致内存溢出)。 Java 为了简化对象释放的操作,降低编程的复杂度,引入的…...
【Qt】初识Qt
文章目录 认识 Qt Creator 界面左边栏代码编辑区UI设计界面构建区 Qt Hello World 程序使用 "按钮" 实现纯代码方式实现可视化操作实现 使用 "标签" 实现存代码实现 可视化操作实现 项目文件解析.pro 文件解析widget.h 文件解析main.cpp 文件解析widget.cp…...
Python----机器学习(逻辑回归与二分类问题)
一、原理 逻辑回归是一种用于解决二分类问题的机器学习算法。其原理基于线性回归 模型,通过使用逻辑函数(也称为sigmoid函数)将线性回归的结果映射到 一个0到1之间的概率值,从而进行分类。 在实际生活中,通常一件事的结…...
YOLOv2 性能评估与对比分析详解
1. YOLOv2 简介 YOLOv2(You Only Look Once v2),也称为 YOLO9000,是 2016 年发布的目标检测模型,旨在改进 YOLOv1 的速度和准确性。它通过引入批量归一化、锚框和高分辨率输入等技术,显著提升了性能。YOLO…...
Java文件批量复制工具实现解析
目录 引言 1、需求背景 2、实现原理 3、实现步骤 3.1 路径预处理 3.2 复制路径解析 3.3 递归复制逻辑 4、测试用例 5、总结 引言 在项目开发中,文件复制操作是常见的需求场景。本文将解析一个基于Java NIO实现的文件批量复制工具,该工具支持多路径批量操作、目录递归…...
uniapp小程序位置授权弹框与隐私协议耦合(合而为一)(只在真机上有用,模拟器会分开弹 )
注意: 只在真机上有用,模拟器会分开弹 效果图: 模拟器效果图(授权框跟隐私政策会分开弹,先弹隐私政策,同意再弹授权弹框): manifest-template.json配置( "__usePr…...
深入理解 Java 内存区域与内存溢出异常
个人主页 文章专栏 文章目录 一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)Java 堆(五)方法区(六…...
算法复习(二分+离散化+快速排序+归并排序+树状数组)
一、二分算法 二分算法,堪称算法世界中的高效查找利器,其核心思想在于利用数据的有序性,通过不断将查找区间减半,快速定位目标元素或满足特定条件的位置。 1. 普通二分 普通二分适用于在有序数组中查找特定元素的位置。我们可以…...
4.15 代码随想录第四十四天打卡
99. 岛屿数量(深搜) (1)题目描述: (2)解题思路: #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1}; // 四个方向 void dfs(const vector<vector<int>>& grid, vector<vector<bool&g…...
Apache HTTPD 换行解析漏洞
漏洞介绍 CVE-2017-15715 Apache HTTPD 是一个广泛使用的 HTTP 服务器,可以通过 mod_php 模块来运行 PHP 网页。在其 2.4.0 到 2.4.29 版本中存在一个解析漏洞,当文件名以 1.php\x0A 结尾时,该文件会被按照 PHP 文件进行解析,这…...
Spark-SQL(二)
一. 利用IDEA开发Spark-SQL 1 在pop.xml中添加spark-sql依赖 2 spark-sql测试代码 1)在idea中读取json文件创建DataFrame 2)SQL风格语法 3 )DSL风格语法 4) RDD转换成DataFrame,DataFrame转换成DataSet 5&#x…...
Node.js 操作 MySQL 数据库
环境检查 Node.js 环境验证 node -v # 确认版本 ≥14.x npm -v # 确认能正常输出 MySQL 服务检查 # Linux systemctl status mysql# Windows (CMD) sc query MySQL 数据库与表创建 创建数据库 CREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode…...
linux运维篇-Ubuntu(debian)系操作系统创建源仓库
适用范围 适用于Ubuntu(Debian)及其衍生版本的linux系统 例如,国产化操作系统kylin-desktop-v10 简介 先来看下我们需要创建出来的仓库目录结构 Deb_conf_test apt源的主目录 conf 配置文件存放目录 conf目录下存放两个配置文件&…...
从“数据孤岛”到“万物互联”,PLC组网重构工控边界
在工业自动化领域,PLC作为现代智能制造的核心控制单元,其应用已从单一设备的逻辑控制延伸至全厂级生产系统的协同管理。作为工业自动化系统的控制核心,PLC不仅需要实现设备层级的操控,更要通过工业通信网络构建起设备间的数据交互…...
【ISP】AWB的基本原理介绍(基于灰度像素检测)
🎨 基于灰度像素检测的自动白平衡(AWB)算法原理与实现 在图像处理中,自动白平衡(AWB, Auto White Balance)是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像…...
uniappx项目上架各手机平台
前段时间用uniappx开发的App,领导要求要在各个主要手机平台上上架了,本来不是我的任务,后来其他人没有空交给我了,上架小白一枚,哭唧唧的自己研究吧,根据领导发的账号密码登录各个平台上架,花费…...
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案 作为大疆机场3的无人机无人化巡检方案的补充三个自主巡检方案: 方案一、M350AIBOX自主机场-适合室外无人机自主巡检 方案二、M4AIBOX自主机场-适合室内自主巡检 方案三、停机坪AIBOX 自主巡…...
【大模型】GPT-4、DeepSeek应用与Prompt使用技巧
GPT-4 作为目前最先进的大语言模型之一,在多个领域都有广泛的应用。以下是一些典型的应用实例以及相关的 Prompt 使用技巧,帮助你更好地发挥 GPT-4 的潜力。 一、GPT-4 应用实例 1. 内容创作 博客/文章写作:生成高质量的技术博客、营销文案、…...
《分布式软总线:不同频段Wi-Fi环境下设备发现兼容性难题》
分布式软总线技术作为实现设备互联互通的关键,正逐渐成为构建万物互联世界的基石。然而,当分布式软总线面临不同频段Wi-Fi环境时,设备发现的兼容性问题成为了阻碍其广泛应用的一大挑战。这一问题不仅影响着用户体验,也制约着分布式…...
微电网与分布式能源:智能配电技术的场景化落地
安科瑞顾强 随着数字化转型与能源革命的加速推进,电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力,正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…...
Flutter实战(1)-- 调试工具
Flutter实战调试篇:从开发到上线的完整指南 工欲善其事,必先利其器。 本文使用的Flutter的相关版本信息: Flutter 1.19.0-4.3.pre • channel beta Engine • revision 9a28c3bcf4 Tools • Dart 2.9.0 (build 2.9.0-14.1.beta) 本文是Flutte…...
每日算法(双指针算法)(Day 1)
双指针算法 1.算法题目(移动零)2.讲解算法原理3.编写代码 1.算法题目(移动零) 2.讲解算法原理 数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp 双指针算法:利用数组下标来…...
无人机的群体协同与集群控制技术要点!
一、技术要点 通信技术 高效可靠的通信链路:无人机集群需要稳定、低延迟的通信网络,以实现实时数据传输和指令交互。通信方式包括无线自组织网络(Ad Hoc)、蜂窝网络、卫星通信等,需根据任务场景选择合适的通信技术。…...
Linux常见指令介绍上(入门级)
1. ls指令 功能:显示出当前目录下的所有子目录与文件。 PS:注意显示的是当前文件下的子目录与文件。 以下这些是可以和ls配套使用的一些选项 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示,而不是显示其下…...
【Linux系统篇】:从匿名管道到命名管道--如何理解进程通信中的管道?
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.进程通信进程通信概念进程通信目的进程通信分类 二.管道匿名…...
三、The C in C++
第三章主要讲解了 C 中继承自 C 语言的核心元素,包括函数创建、执行控制、操作符、数据类型、作用域、存储指示、复合类型创建等。 3.1 创建函数(Creating Functions) C允许函数重载,同名的函数可以根据参数类型和数量区分&…...
探索图像分类模型的 Flask 应用搭建之旅
最近深入研究了利用深度学习模型进行图像分类,并将其部署到 Flask 应用中的项目,过程中遇到了不少挑战,也收获了满满的知识,迫不及待想和大家分享一下。 一、项目背景与目标 在当今数字化的时代,图像数据呈爆炸式增长…...
OpenAI发布GPT-4.1系列模型——开发者可免费使用
OpenAI刚刚推出GPT-4.1模型家族,包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重点是——现在全部免费开放! 虽然技术升级值得关注,但真正具有变革意义的是开发者能通过Cursor、Windsurf和GitHub Copilot等平台立即免费调用这些模型。…...
自动化测试工具playwright中文文档-------14.Chrome 插件
介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数,因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…...
VGA显示
屏幕扫描形式 在回扫的过程中,电子枪不能发射电子,否则会影响荧光屏上既有图像的颜色,所以 回扫期间,需要进行行消隐,简单来说就是关闭电子枪。每行结束时,用行同步信号进行行 同步,图中从右上方向左下方的斜向虚线就是其回行扫示意图。 当整个屏幕的所有行都扫…...
微服务1--服务架构
系统架构 单体应用架构 特点:所有功能集中在一个应用中(如传统的 Spring Boot WAR 包)。 适用场景:小型项目、快速验证阶段。 优缺点: ✅ 开发简单,部署方便。 ❌ 扩展性差,技术栈耦合。 …...
鸿蒙应用元服务开发-Account Kit配置登录权限
一、场景介绍 华为账号登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统,元服务可以方便地获取华为账号用户的身份标识,快速建立元服务内的用户体系。 用户打开元服务时,不需要用户点击登录/注册按钮&#…...
zg-docker详解与部署微服务实战与k8s
一. Docker课程 Docker简介 Docker是一个开源的容器引擎,有助于快速开发,docker更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 使用宿主机的网络:即使用宿主机的网段。 联合文件系统-一个镜像,启动了多个容器,对于镜像中的文件a,多个容器…...
【含文档+PPT+源码】基于Python的快递服务管理系统【
毕业作品基于Django和HTML的快递网站设计与实现 课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于Python的快递服务管理系统&#x…...
嵌入式WebRTC轻量化SDK压缩至500K-800K ,为嵌入式设备节省Flash资源
一、SDK轻量化的核心技术实现 1、WebRTC库裁剪与模块化设计 EasyRTC针对嵌入式设备的资源限制,对原生WebRTC库进行深度裁剪,仅保留核心通信功能(如信令管理、编解码、网络传输等),移除冗余组件(如部分调试…...
JAVA学习-Stream
Stream Stream也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数 组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式 操作集合或者数…...
如何在同一个电脑配置多个jdk版本并随意切换
1.右键此电脑属性 2.点击高级系统配置 3.点击环境变量 4.进去后点击新建 变量名:JAVA_HOME_版本,来进行命名 变量值:jdk的路径即可,比如我的是D:\JAVA\JAVA11 5.创建完你所有的jdk版本之后接着新建 变量名:JAVA_HOME…...
网工_传输层协议概述
2025.02.19:网工老姜&小猿网学习笔记 第22节 传输层协议概述 2.1 进程之间的通信2.2 传输层的两个主要协议2.3 传输层的端口2.3.1 端口号 2.4 本章小结 2.1 进程之间的通信 前三层解决了数据从主机到主机的问题,也就是,我们现在已经可以把…...
《java面试宝典》之java多线程面试题
1:什么是线程? 轻量级的进程 2:线程的三个部分是? 处理机 代码 数据 3:为什么使用多线程 使UI响应更快 利用多处理器系统 简化建模 4:代码示例:Java中实现多线程的两种方式,包括如何…...
5款电脑健康状况监测软件
鲁大师:专业且免费,能检测电脑硬件配置,辨别硬件真伪,检查电脑病毒隐患。可一键清理系统垃圾,提升电脑性能。还能全程监护硬件状态,实时检测硬件温度变化,让用户轻松掌握电脑健康状况。360 安全…...
JWT令牌:实现安全会话跟踪与登录认证的利器
摘要:本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用,详细介绍了JWT令牌的概念、组成、生成与校验方法,以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤,为系统的安全认证机制提供了全面且深入的…...