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

QT跨平台应用程序开发框架(3)—— 信号和槽

目录

一,基本概念

二,connect函数使用

2.1 connect

2.2 Qt内置信号和槽

 2.3 一些细节

三,自定义信号和槽

3.1 自定义槽函数

3.2 自定义信号

3.3 带参数的信号槽

四,信号和槽的意义

五,信号和槽断开连接

六,使用lamdba表达式定义槽函数


一,基本概念

  • Qt中,用户和空间的每次交互过程我们称为一个事件,比如“点击按钮”和“关闭窗口”都是一个事件
  • 每个事件发生时都会产生一个信号,比如点击按钮会产生“按钮被点击的信号”,用户关闭窗口会产生“窗口被关闭”的信号,这点我们前面已经介绍过,并且基本概念和Linux的信号有相似之处:Linux系统编程——进程信号-CSDN博客

在Qt中的信号主要涉及到三个要素:

  • 信号源:由哪个空间发出
  • 信号类型:用户进行不同的操作,就可能触发不同的信号
  • 信号的处理方式:就是一个处理函数,这个处理函数在Qt中就叫做“槽函数”(slot),其实就是一个回调函数;Qt 可以用connect将一个信号和一个槽关联起来

注意:必须先把信号和槽用connect关联之后,再触发这个信号才会执行槽函数,顺序不能颠倒 

二,connect函数使用

2.1 connect

这个函数是 QObject 类提供的一个静态成员函数

问题:为什么说是静态呢?

解答

  • 这个QObject 类是其它Qt内置类的“祖宗”
  • 因为Qt的内置类有很多很多继承关系的,而绝大多数的类,往上深扒继承关系,最终都会看到有个 QObject类
  • 所以在很多很多Qt内置内中,都可以直接使用connect这个函数

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跨平台应用程序开发框架(2)—— 初识QT-CSDN博客

上下面我们实现下点击按钮关闭窗口的代码:

这个close也是别人已经实现好了,作用就是关闭窗口,我们直接用就行 

注意:我们在填第二个参数时会显示有两个click:

  • 第一个click:左边小图标是锯齿的,表示这是一个slot函数,作用就是在调用的时候相当于点了一下按钮
  • 第二个clicked:左边的是一个类似信号发射器的一个图标,这个表示信号;我们要选的是第二个,clicked表示过去式,就是“点完了”

2.2 Qt内置信号和槽

Qt 也提供了很多内置的信号和槽让我们使用,但是要想全部记住,几乎是不可能的,所以最好的方式就是多看文档,多写,所谓“熟能生巧” 

在翻文档的时候,如果没有找到对应的条目,可以看看这个类的父类,并且文档也提供了这个类的父类叫什么,以QPushButton为例:

关于这个QAbstractButton类,首先 abstract 这个单词是“抽象的”的意思,因为Qt会提供好几种按钮,这些按钮 中存在一些功能相同的内容,所以就把这些相同的对东西搞出来,单独搞成了一个QAbstractButton这个类,其它很多控件类也是如此的 


然后往下滑,就会看到一些内置的slot和signal,如果没有,就可以去父类看看,比如上面说到的QAbstractButton类,在它的页面往下滑,就可以看到:

再点击对应的绿色的,就能看到更多详细信息,比如clicked:

 2.3 一些细节

我们再观察下connect函数的定义和使用:

问题:char* 和 函数指针是一个东西吗?

解答: 两个都是指针,但是不是同一个类型的指针

  • 我们clicked函数的声明是:
  • 所以指向这个函数的函数指针,也就是取地址后的指针就是 void(*)(),这个和char*是完全不同的,close同理;而在C++中,是不允许用两个不同类型的指针类型相互赋值的(函数传参,本质上就是赋值)

我们可以看下connect在文档中的声明:

 这个函数声明是旧版本的Qt的connect的声明,所以在以前版本的传参和现在有区别:

  • 给信号参数传参时,要搭配一个 SIGNAL 宏,主要是将传入的函数指针转成 char*
  • 给槽函数传参时,要搭配一个 SLOT 宏,同上

所以旧版本需要进行的用法如下:

connect(button, SIGNAL(&QPushButton::clicked), this, SLOT(&Widget::close));

在Qt 5 开始,对上述操作进行了简化,去掉了两个宏,给connect提供了重载版本,第二个参数和第四个参数乘客泛型参数,允许传入任意类型的函数指针

这个就是Qt封装的一个类型萃取器,但是关于类型萃取,涉及模板特化等特性,这里不过多展开

有了泛型参数,此时这个connect函数就带有了一定的“参数检查”功能,如果传入的第一和第二或者第三和第四参数不匹配,那么代码就会直接编译出错,这个是宏做不到或者说很难做到的

三,自定义信号和槽

3.1 自定义槽函数

有时候Qt内置的信号和槽可能无法满足我们的需求,所以我们可以自己实现信号和槽,我们先说自定义槽

我们上篇文章已经用自定义槽实现了按按钮切换按钮里的文本:

所以所谓的槽函数,操作过程和自定义一个普通的成员函数没啥区别


除了上面这种最基础的,还有第二种更便捷的方法

先通过拖拽方式创建一个按钮,右键这个按钮,点击“转到槽”:

比如我实现一个切换窗口标题的按钮:

  • 可以看到,我们通过这种方式生成的槽函数,并没有通过connect关联,因为在 Qt 中,除了通过connect 之外,还可以通过函数名字的方式来自动连接
  • 比如上面的槽函数名字 on_pushButton_clicked ,on相当于固定前缀,中间的 pushButton 是按钮的 objectName ,后面的 clicked 就是信号的名字
  • 所以当函数名符合上述规则之后,Qt就能自动把信号和槽进行关联

问题:如何做到自动识别的?

解答:我们把上面槽函数的声明和定义的clicked都换成click再次执行程序,可以看到输出有个:

 而这个函数正是在 ui_widget.h 中调用的:

3.2 自定义信号

  • 自定义槽函数非常重要,开发中大部分情况都是需要自定义槽函数的,因为槽函数就是用户触发某个操作之后要进行的业务逻辑,而业务逻辑通常是很复杂的,所以需要程序员自己去写
  • 而对于自定义信号,就比较少见,实际开发中很少会需要自定义信号
  • 因为信号对应着用户的某个操作,而在GUI中,用户能进行的操作是可以穷举的,Qt 内置的信号基本已经覆盖到了所有的用户操作

因此使用Qt 的内置信号,足以应付大部分的开发场景了,咱们的Widget虽然还没有定义任何信号,但是由于其继承了 QWidget 和 QBbject, 这里面已经提供了一些信号,可以直接用

但毕竟是大部分,那还有一小部分是内置信号解决不了的,所以Qt还是为我们提供了自定义信号的途径和方式


  • 所谓 Qt 的信号,其实也是一个“函数”,槽函数和普通成员之间没啥差别
  • 但是信号函数,则是一类非常特殊的函数,程序员只要写出函数声明并告诉 Qt 这是一个“信号”即可
  • 这个函数的定义,是 Qt 在编译过程中自动生成的,并且这个过程我们无法干预

信号在 Qt 中是特殊的机制,Qt 生成的信号函数的实现,要配合 Qt 框架做很多既定的操作

然后关于信号函数声明:

  • 信号函数的返回值必须是void
  • 有没有参数都可以,甚至支持重载 

在进行自定义信号创建之前,要明白几点:

  • Qt 中内置的信号,都不需要通过咱们手动通过代码来触发,用户在 GUI 进行操作时,就会自动触发对应信号(发射信号的代码已经内置到 Qt 源码框架中了) 
  • 而对于我们的自定义信号,Qt 有个日俄欧美人你提供了一个关键字 emit ,也有发射的意思,具体用法下面代码会有演示

①首先是声明信号函数 

②然后将自定义信号和自定义槽函数关联起来并使用emit关键字手动触发信号 

③查看结果 


 emit手动触发信号的步骤可以在代码的任意位置,不一定非得在构造函数中

  • 其实在 Qt 5 版本之后,emit现在其实啥也没干,真正的操作都包含在 mySignal 内部生成的函数定义中
  • 就是上面的代码中不写emit,就写个mySignal() 相当于调用这个函数,一样可以完成触发信号
  • 但即使如此,实际开发中建议加上emit,能增加代码可读性,标识这个语句是发射信号
  • emit也可以手动发射Qt内置的信号

3.3 带参数的信号槽

  • 信号和槽可以带参数,当信号带有参数的时候,槽的参数必须和信号的一致
  • 此时发射信号的时候,就可以给信号函数传递实参,与之对应的这个参数就会被传递到对应的槽函数中,就可以起到让信号给槽传参效果了

①先在声明处带上参数(C++中形参的名字可以省略)

②给槽的定义带上参数 

③查看结果 

④也可以通过按钮来切换标题: 

//通过拖拽方式创建按钮后,右键“转到槽”
void Widget::on_pushButton_clicked()
{emit mySignal("把标题设置为标题1");
}void Widget::on_pushButton_2_clicked()
{emit mySignal("把标题设置为标题2");
}


  • Qt中很多内置的信号也是带有参数的,但是这些参数不是我们自己传的,比如 clicked 信号就有一个参数,是bool,表示当前按钮是否处于“选中”状态(对于QPushButton没啥作用,对QCheckBox复选框很有用,后期再讲)
  • 信号函数的参数和槽参数数量可以不一致,但是信号参数数量需要 >= 槽的参数,否则会编译报错

问题:为什么允许信号参数数量 >= 槽参数个数 呢?

解答

  • 一个槽函数可能会绑定多个信号
  • 如果我们严格要求参数个数一致,就意味着信号绑定槽的要求变高了,会有很多麻烦
  • 换而言之,当下的规则就允许一个槽函数能够绑定更多的信号了

个数不一致,槽函数就会按照信号的参数顺序,拿到信号的前 N 个参数,总之就是要确保槽函数的每个参数是有值的

四,信号和槽的意义

信号和槽的主要面对的问题,就是“响应”用户的操作,执行一段业务逻辑(代码):

  • Qt 的这种信号和槽,在各类 GUI 开发的框架中,是一个比较有特色的存在;这个有特色其实是贬义词,因为其它的 GUI 开发框架,搞的方式更简洁一些
  • 网页开发中响应用户操作,主要就是挂“回调函数”,直接将函数赋值给对应的属性,不需要搞一个单独的connect完成上述的信号槽关联(大部分的 GUI 开发框架都是这样搞的)

Qt 这样的信号槽和connect机制,设想是这样的:

  • 解耦合:把触发用户操作的控件 和 对应的处理逻辑进行解耦合
  • “多对多”效果:比如一个信号可以 connect 到多个槽函数上,一个槽函数也可以被多个信号 connect

其实在GUI开发过程中,“多对多”其实是个伪需求,实际开发很少用到,绝大多数情况“一对一”够用了,而且新推出的一些图形化开发框架,很少有再继续支持这种多对多了 

五,信号和槽断开连接

有连接就有断开,假设我们不再继续保持一个信号和槽的连接,那么可以使用 disconnect 函数来取消关联

  • 但是disconnect用的是比较少的,大部分情况下把信号和槽连上之后就不必再管了
  • 主动断开的场景往往是把信号重新绑定到另一个槽函数上

disconnect的用法和connect基本一致:

六,使用lamdba表达式定义槽函数

定义槽函数时,也可以用lamdba表达式的,lamdba表达式主要应用在“回调函数”场景中:C++ —— C++11新增语法-CSDN博客

废话不多说,直接上代码:

  • 另外,我们也要确认捕获到 lamdba 内部的变量是有意义的,因为回调函数的执行时机是不确定的,所以就要保证无论用户点击了按钮,捕获到的变量都能正确使用
  • lamdba 除了可以按照值得方式来捕获变量[=],也可以按照引用得方式来捕获[&],这时捕获到的一般就是各种控件的指针(但是Qt一般不用[&],因为可能会有很多意想不到的报错)
  • 以上面的代码为例,如果是[&],那么运行后点击按钮就会报错,因为我们在构造函数里创建的button声明周期是随构造函数的,构造函数执行完后button就没了,这时候传递给lamdba的引用就是个空引用,直接闪退
  • lamdba是C++11加入的,Qt 5 及更高版本默认就是按照C++11来编译的,如果使用Qt 4 或者更老版本,就需要在 .pro 文件里手动加上 C++11的编译选项哦

相关文章:

QT跨平台应用程序开发框架(3)—— 信号和槽

目录 一,基本概念 二,connect函数使用 2.1 connect 2.2 Qt内置信号和槽 2.3 一些细节 三,自定义信号和槽 3.1 自定义槽函数 3.2 自定义信号 3.3 带参数的信号槽 四,信号和槽的意义 五,信号和槽断开连接 六&…...

技术面试中的软素质技巧性答复集锦

1、请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研…...

JavaWeb项目——如何处理管理员登录和退出——笔记

一、知识点 1、WebServlet注解的使用 WebServlet注解是Servlet 3.0引入的一个特性,它允许开发者在Servlet类上使用注解来声明Servlet的一些属性,从而避免在web.xml文件中进行配置。这种方式简化了Servlet的配置过程,使得代码更加简洁&#…...

函数递归的介绍

1.递归的定义 在C语言中,递归就是函数自己调用自己 上面的代码就是 main 函数在函数主体内 自己调用自己 但是,上面的代码存在问题:main 函数反复地 自己调用自己 ,不受限制,停不下来。 最终形成死递归,…...

昇腾环境ppstreuct部署问题记录

测试代码 我是在华为昇腾910B3上测试的PPStructure。 import os import cv2 from PIL import Image #from paddleocr import PPStructure,draw_structure_result,save_structure_res from paddleocr_asyncio import PPStructuretable_engine PPStructure(show_logTrue, imag…...

《知识图谱:鸿蒙NEXT中人工智能的智慧基石》

在鸿蒙NEXT系统的人工智能应用中,知识图谱技术犹如一座智慧基石,为系统的智能化提供了强大的知识支撑,开启了更智能、更高效、更个性化的交互新时代。 提升语义理解能力 知识图谱以其结构化的知识表示方式,将各种实体和它们之间…...

Springboot项目Jackson支持多种接收多种时间格式

前言 在springboot项目中经常会使用Jackson框架,当前端给后端传输时间类型时,我们一般需要先配置好时间格式,否则后端无法接收。以下是一些配置方法 统一配置 spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss这种配置就是要求前端统一传输的格式是yyyy-…...

go语言zero框架通过chromedp实现网页在线截图的设计与功能实现

在 GoZero 框架中实现网页在线截图的功能,可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包,可以用来在 Go 程序中模拟浏览器操作,如页面截图、DOM 操作、表单提交等。 下面是一个…...

基于深度学习的视觉检测小项目(十四) 用SQLite数据库进行用户管理

在开始做用户管理之前,先要了解一下SQLite数据库的基础知识:https://blog.csdn.net/xulibo5828/category_12785993.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12785993&sharereferPC&sharesourcexulibo5828&sharefrom…...

【2024年华为OD机试】 (B卷,100分)- 敏感字段加密(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个由多个命令字组成的命令字符串: 字符串长度小于等于 127 字节,只包含大小写字母、数字、下划线和偶数个双引号;命令字之间以一个或多个下划线 _ 进行分割;可以通过两个双引号 "" 来标识包含下划线 _ 的命令字或空命令字(仅包含…...

图像去雾数据集的下载和预处理操作

前言 目前,因为要做对比实验,收集了一下去雾数据集,并且建立了一个数据集的预处理工程。 这是以前我写的一个小仓库,我决定还是把它用起来,下面将展示下载的路径和数据处理的方法。 下面的代码均可以在此找到。Auo…...

Vue3数据响应式原理

什么是数据响应式 当数据变化时,引用数据的函数(副作用函数)自动重新执行。 即数据触发了函数的响应,如:视图渲染中使用了某数据,数据改变后,视图跟着自动更新。 触发者:数据 响应者…...

5.最长回文子串--力扣

给你一个字符串 s,找到 s 中最长的 回文子串。 示例 1: 输入:s “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s “cbbd” 输出:“bb” 原题如上&…...

ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT

文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…...

统信V20 1070e X86系统编译安装mysql-5.7.44版本以及主从构建

设备信息 操作系统版本架构CPU内存备注统信UOS V20 1070eX864C8G此配置仅做编译安装验证,持续运行或数据量增长大请自行评估资源配置。统信UOS V20 1070eX864C8G 资源包 该包包含mysql-5.7.44源码包、boost资源包、统信编译mysql-5.7.44安装包 通过网盘分享的文件…...

麒麟LINUX V10SP3 2401安装ORACLE 12.2.1 runInstaller直接报UNZIP格式不对

好久没有安装ORACLE了,一般都是RHEL上安装得比较多,这不,现在大家都是选择国产操作系统来安装数据库了,以前在龙蜥,欧拉,麒麟上也安装过,都没有问题,想来在麒麟LINUX v10sp3 2401上面…...

10 为什么系统需要引入分布式、微服务架构

java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...

【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)

目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显,发现可以打SSTI 本地起一个服务,折半查找fuzz黑名单,不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉OpenHarmony应用开发流程。 在开始之前,您需要了解有关OpenHarmon…...

解决npm install安装出现packages are looking for funding run `npm fund` for details问题

当我们运行npm install时,可能会收到类似以下的提示信息:“x packages are looking for funding.” 这并不是错误提示,也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…...

python助力WRF自动化运行

对大部分人而言,特别是新用户,WRF模式的安装繁琐且不必要,可以作为后续进阶掌握的技能,本学习跳过繁琐的安装步骤,直接聚焦模式的运行部分,通过短平快的教学,快速掌握模式运行。进一步将python语…...

Go-知识 版本演进

Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…...

企业级NoSQL数据库Redis

1.浏览器缓存过期机制 1.1 最后修改时间 last-modified 浏览器缓存机制是优化网页加载速度和减少服务器负载的重要手段。以下是关于浏览器缓存过期机制、Last-Modified 和 ETag 的详细讲解: 一、Last-Modified 头部 定义:Last-Modified 表示服务器上资源…...

Android渲染Latex公式的开源框架比较

对比主流框架,介绍如下几款 1、AndroidMath 官网:https://github.com/gregcockroft/AndroidMath/tree/master 基于android原生view方式渲染 优点:速度快,开源协议 MIT license 缺点:不支持文字公式混合渲染 2、Ma…...

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…...

Sam Altman亲自确认:o3-mini即将上线!GPT和o系列模型合并!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...

数据结构-队列

目录 前言一、队列及其抽象数据类型1.1 队列的基本概念1.2 队列的抽象数据类型 二、队列的实现2.1 顺序表示2.1.1 结构定义2.1.2 基本操作的实现 2.2 链式表示2.2.1 结构定义2.2.2 基本操作的实现 总结 前言 本篇文章介绍队列的基础知识,包括队列的抽象数据类型以及…...

Go Map 源码分析(一)

Go语言中的map是通过哈希表实现的,其底层结构和实现机制如下: 一、hash 结构 hmap结构体:是map的头部结构,主要字段及含义如下: count:表示当前哈希表中的元素数量,与len()函数相对应。flags…...

天机学堂5-XxlJobRedis

文章目录 梳理前面的实现:Feign点赞改进 day07-积分系统bitmap相关命令签到增加签到记录计算本月已连续签到的天数查询签到记录 积分表设计签到-->发送RabbitMQ消息,保存积分对应的消费者:**消费消息 用于保存积分**增加积分查询个人今日积…...

SpringBoot整合junit

SpringBoot 整合 junit 特别简单,分为以下三步完成: 1在测试类上添加 SpringBootTest 注解2使用 Autowired 注入要测试的资源3定义测试方法进行测试 1.实验准备: 创建一个名为 springboot_junit_test 的 SpringBoot 工程,工程目录结构如下…...

Jenkins-pipeline Jenkinsfile说明

一. 简介: Jenkinsfile 是一个文本文件,通常保存在项目的源代码仓库中,用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化,并且易于共享和审核。 二. 关于jenkinsfile: jenkins的pipeline…...

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章:三层架构和MVC 三层架构: 开发服务器端,一般基于两种形式,一种 C/S 架构程序,一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序,B/S 架构又分成了三层架构三层架构: 表现…...

结合帧级边界检测和深度伪造检测,定位部分伪造音频攻击中的篡改区域

Integrating frame-level boundary detection and deepfake detection for locating manipulated regions in partially spoofed audio forgery 摘要: 部分伪造音频是一种深度伪造的变体,它通过引入伪造或外部来源的善意音频片段来操纵音频语句&#xf…...

人工智能之深度学习_[2]-PyTorch入门

文章目录 PyTorch1.PyTorch简介1.1 什么是PyTorch1.2 PyTorch特点1.3 PyTorch发展历史 2 张量创建2.1 什么是张量2.2 基本创建方式2.3 线性和随机张量2.4 0、1、指定值张量2.5 指定元素类型张量 3 张量类型转换3.1 张量转换为NumPy数组3.2 NumPy数组转换为张量3.3 提取标量张量…...

vue2与vue3的区别

目录 1. 性能 2. 组合式 API 3. 生命周期钩子 4. 片段(Fragments) 5. 递归组件 6. 自定义渲染器 7. 全局 API 8. 组件内部的 this 9. 模板语法 10. 兼容性 总结 Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本,它们在多个方面有所不…...

八股学习 Mysql

八股学习 Mysql 常见面试问题优化其他 定位慢查询方案一:开源工具方案二:MySQL自带慢日志 SQL执行计划示例场景名词解释 索引概念底层数据结构聚簇索引、二级索引(非聚簇索引)覆盖索引覆盖索引应用场景创建原则索引失效 SQL优化表…...

主从复制

简述mysql 主从复制原理及其工作过程,配置一主两从并验证。 主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…...

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障: 一台zfs文件系统的服务器,管理员误操作删除了服务器上的数据。 服务器数据恢复过程: 1、将故障服务器中所有硬盘做好标记后取出,硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…...

Linux安装docker,安装配置xrdp远程桌面

Linux安装docker,安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…...

Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决

Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决 1. 打开设备管理器2. 点击显示适配器3. 更新下方两个选项的驱动3.1 更新驱动Inter(R) UHD Graphixs3.2 更新驱动NVIDIA GeForce RTX 4060 Laptop GPU 4. 其他文章快来试试吧🥰 1. 打开设备管理器 在电…...

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…...

使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发

开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎,可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现,展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…...

调试Hadoop源代码

个人博客地址:调试Hadoop源代码 | 一张假钞的真实世界 Hadoop版本 Hadoop 2.7.3 调试模式下启动Hadoop NameNode 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数,如下: export HADOOP_NAMENODE_OPTS"-Xdeb…...

mkv转码mp4(ffmpeg工具)

基于windows,Linux也可以用,都是命令行 下载路径(https://github.com/BtbN/FFmpeg-Builds/releases) 下载安装包:ffmpeg-n6.1-latest-win64-lgpl-6.1.zip,(根据自己的平台选择下载)并…...

前端项目搭建和基础配置

这个模块主要是介绍从零开始搭建项目的一些操作,包含一些前端常用的配置,这里只是一部分,会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称,框架选择Vue…...

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域,它涉及到网络系统的硬件、软件以及数据的安全保护,确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施,保…...

【Qt】02-信号与槽函数

发生的原因与事件 前言一、什么是信号与槽(Signals and Slots)?1.1 信号(Signals)1.2 槽(Slots)1.3 连接方式 二、调用基本的信号与槽函数2.1 代码分析connect()的用法 2.2 结果展示 三、自定义…...

CVPR 2024 机器学习方向总汇(多任务、联邦学习、迁移学习和对抗等)

1、Machine Learning(机器学习)多任务、联邦学习、迁移学习和对抗等 Molecular Data Programming: Towards Molecule Pseudo-labeling with Systematic Weak Supervision 👍摘要Improving Physics-Augmented Continuum Neural Radiance Field-Based Geometry-Agnos…...

spring中bean的循环依赖细节描述

首先,循环依赖不是一件好事,设计上几乎不会这么设计。但是总有时候要碰到一起奇怪的循环依赖。 spring bean循环依赖之所以能实现,也是有条件的,构造函数的依赖显然不行。而bean生命周期的实例化和属性设置是分阶段的&#xff0c…...