Web APIs——Dom获取属性操作

1.变量声明

1.1以后声明变量我们优先使用哪个?
·  const
· 有了变量先给const,如果发现它后面是要被修改的,再改为let
1.2 为什么const声明的对象可以修改里面的属性?
·  因为对象是引用类型,里面存储的是地址,只要地址不变,就不会报错
·  建议数组和对象使用 const 来声明
1.3 什么时候使用let声明变量?
·  如果基本数据类型的值或者引用类型的地址 发生变化 的时候,需要用 let
· 比如 一个变量进行加减运算,比如 for循环中的 i++

2.Web API 基本认知

2.1 Web API阶段我们学习那两部分?
·  DOM
·  BOM
2.2 DOM 是什么?有什么作用?
·  DOM 是文档对象模型
·  操作网页内容,可以开发网页内容特效和实现用户交互
2.3 DOM 树是什么?
·  将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM树
·  作用: 文档树直观的体现了标签与标签之间的关系
2.4 DOM对象怎么创建的?
·  浏览器根据html标签生成的 JS对象(DOM对象)
·  所有的标签属性都可以在这个对象上面找到,修改这个对象的属性会自动映射到标签身上
·  DOM的核心就是把内容当 对象 来处理
2.5 document 是什么?
·  是 DOM 里提供的一个 对象
·所以它提供的属性和方法都是 用来访问和操作网页内容的 例:document.write()
·  网页所有内容都在document里面

3.获取DOM元素

3.1 根据CSS选择器来获取DOM元素 (重点)

1. 选择匹配的第一个元素

语法:
参数:
包含一个或多个有效的CSS选择器 字符串
返回值:
CSS选择器匹配的 第一个元素 ,一个 HTMLElement对象。
如果没有匹配到,则返回null。
多参看文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector

2. 选择匹配的多个元素

语法:
参数:
包含一个或多个有效的CSS选择器 字符串
返回值:
CSS选择器匹配的 NodeList 对象集合
例如:
得到的是一个 伪数组
·有长度有索引号的数组
·但是没有 pop() push() 等数组方法
想要得到里面的每一个对象,则需要遍历(for)的方式获得。
注意 :哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个 伪数组 ,里面只有一个元素而已

 1. 获取页面中的标签我们最终常用那两种方式?

·  querySelectorAll()
·  querySelector()
2. 他们两者的区别是什么?
·  querySelector() 只能选择一个元素, 可以直接操作
·  querySelectorAll() 可以选择多个元素,得到的是伪数组,需要遍历得
到每一个元素
3. 他们两者小括号里面的参数有神马注意事项?
·  里面写css选择器
·  必须是字符串,也就是必须加引号
练习 :

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <ul class="nav">
      <li>我的首页</li>
      <li>产品介绍</li>
      <li>联系方式</li>
    </ul>
    <script>
      const li = document.querySelectorAll(".nav li");
      // console.log(li)
      for (let i = 0; i < li.length; i++) {
        console.log(li[i]);
      }
    </script>
  </body>
</html>

 3.2 其他获取DOM元素方法(了解)

 

4.操作元素内容 

4.1 设置/修改DOM元素内容有哪2种方式?

·  元素.innerText 属性

 · 元素.innerHTML 属性

4.2 两者的区别是什么?  

·  元素.innerText 属性 只识别文本,不能解析标签
·  元素.innerHTML 属性 能识别文本,能够解析标签
· 如果还在纠结到底用谁,你可以选择innerHTML

练习

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>年会抽奖</title>
    <style>
      .wrapper {
        width: 840px;
        height: 420px;
        background: url(./images/bg01.jpg) no-repeat center / cover;
        padding: 100px 250px;
        box-sizing: border-box;
      }
    </style>
  </head>

  <body>
    <div class="wrapper">
      <strong>传智教育年会抽奖</strong>
      <h1>一等奖:<span id="one">???</span></h1>
      <h3>二等奖:<span id="two">???</span></h3>
      <h5>三等奖:<span id="three">???</span></h5>
    </div>
    <script>
      //声明数组
      const personArr = ["周杰伦", "刘德华", "周星驰", "Pink老师", "张学友"];
      //生成随机数
      const random1 = Math.floor(Math.random() * personArr.length);
      //一等奖
      const one = document.querySelector("#one");
      one.innerHTML = personArr[random1];
      personArr.splice(random1, 1);
      //二等奖
      const random2 = Math.floor(Math.random() * personArr.length);
      const two = document.querySelector("#two");
      two.innerHTML = personArr[random2];
      personArr.splice(random2, 1);
      //三等奖
      const random3 = Math.floor(Math.random() * personArr.length);
      const three = document.querySelector("#three");
      three.innerHTML = personArr[random3];
      personArr.splice(random3, 1);
    </script>
  </body>
</html>

5.操作元素属性

5.1 操作元素常用属性

还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片
最常见的属性比如: href、title、src 等
语法:
举例说明:

练习:

页面刷新,图片随机更换
需求:当我们刷新页面,页面中的图片随机显示不同的图片
分析:
①:随机显示,则需要用到随机函数
②:更换图片需要用到图片的 src 属性,进行修改
③:核心思路:
1. 获取图片元素
2. 随机得到图片序号
3. 图片 .src = 图片随机路径
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <img src="" alt="" />
    <script>
      // function getRandom(N, M) {
      //   return Math.floor(Math.random() * (M - N + 1) + N);
      // }
      //生成随机数
      const random = Math.floor(Math.random() * 6 + 1);
      const img = document.querySelector("img");
      img.src = `./images/${random}.webp`;
    </script>
  </body>
</html>

5.2 操作元素样式属性

1.通过 style 属性操作CSS

语法:
举例说明:
注意:
1. 修改样式通过 style 属性引出
2. 如果属性有- 连接符,需要转换为 小驼峰 命名法
3. 赋值的时候,需要的时候不要忘记加 css单位
练习

 页面刷新,页面随机更换背景图片

需求:当我们刷新页面,页面中的背景图片随机显示不同的图片
分析:
①: 随机函数
②: css页面背景图片 background-image
③: 标签选择body, 因为body是唯一的标签,可以直接写 document.body.style
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body {
        background-image: url(./images/desktop_1.jpg);
      }
    </style>
  </head>
  <body>
    <script>
      //生成随机数
      function getRandom(N, M) {
        return Math.floor(Math.random() * (M - N + 1)) + N;
      }
      const random = getRandom(1, 10);
      const body = document.querySelector("body");
      // body.style.background = ` url(./images/desktop_${random}.jpg) no-repeat top center/cover`;
      body.style.backgroundImage = `url(./images/desktop_${random}.jpg)`;
    </script>
  </body>
</html>

2. 操作类名(className) 操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
语法:
注意:
1. 由于class是关键字, 所以使用className去代替
2. className是使用新值 旧值, 如果需要添加一个类,需要保留之前的类名

3. 通过 classList 操作类控制CSS

为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名
语法:

//切换类toggle()有就删掉,没有就加上 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 200px;
        height: 200px;
        color: black;
      }
      .active {
        color: red;
        background-color: pink;
      }
    </style>
  </head>
  <body>
    <div class="box">文字</div>
    <script>
      const div = document.querySelector("div");
      //className
      // div.className = "active";

      //classList
      //添加类名add()
      // div.classList.add("active");
      //删除类名remove()
      // div.classList.remove("box");
      //切换类toggle() 'active'有就删掉,没有就加上
      div.classList.toggle("active");
    </script>
  </body>
</html>

5.3 操作表单元素 属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是 把表单类型转换为文本
正常的有属性有取值的 跟其他的标签属性没有任何区别
·  获取: DOM对象.属性名
·  设置: DOM对象.属性名 = 新值

 

注意:修改表单内容用 表单.value=' ',不用表单.innerHTML=' '。(button除外)

表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示
如果为true 代表添加了该属性 如果是false 代表移除了该属性(字符串类型除了空以外,都为true)
比如: disabled(是否禁用按钮)、checked(是否勾选)、selected
举例说

5.4 自定义属性

标准属性: 标签天生自带的属性 比如class id title等, 可以直接使用点语法操作比如: disabled、checked、 selected
自定义属性:
·  在html5中推出来了专门的data-自定义属性
·  在标签上一律以data-开头
·  在DOM对象上一律以dataset对象方式获取

6. 定时器-间歇函数

目标:能够使用定时器函数重复执行代码
定时器函数可以开启和关闭定时器

6.1 开启定时器

·  作用:每隔一段时间调用这个函数
·  间隔时间单位是毫秒
举例说明:
举例说明
注意:
1. 函数名字 不需要加括号 (加括号会立即执行)
2. 定时器返回的是一个id数字

6.2 关闭定时器

一般不会刚创建就停止,而是满足一定条件再停止

举例说明:

练习:

阅读注册协议
需求:按钮60秒之后才可以使用
分析:
①:开始先把按钮禁用( disabled 属性)
②:一定要获取元素
③:函数内处理逻辑
秒数开始减减
按钮里面的文字跟着一起变化
如果秒数等于0 停止定时器 里面文字变为 同意 最后 按钮可以点击

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <textarea name="" id="" cols="30" rows="10">
        用户注册协议
        欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
        【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看
    </textarea>
    <br />
    <button class="btn" disabled>我已经阅读用户协议(5)</button>
    <script>
      //1.获取元素
      const btn = document.querySelector(".btn");
      //2.倒计时
      let i = 5;
      //3.定时器
      function time() {
        i--;
        btn.innerHTML = `我已经阅读用户协议(${i})`;
        if (i === 0) {
          clearInterval(m);
          btn.innerHTML = "同意";
          btn.disabled = false;
        }
      }
      let m = setInterval(time, 1000);
    </script>
  </body>
</html>

综合案例:

轮播图定时器版
需求:每隔一秒钟切换一个图片
分析:
①:准备一个数组对象,里面包含详细信息(素材包含)
②:获取元素
③:设置定时器函数
设置一个变量++
找到变量对应的对象
更改图片、文字信息
激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类
④:处理图片自动复原从头播放(放到变量++后面,紧挨)
如果图片播放到最后一张, 就是大于等于数组的长度
则把变量重置为0

 

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>轮播图点击切换</title>
    <style>
      * {
        box-sizing: border-box;
      }

      .slider {
        width: 560px;
        height: 400px;
        overflow: hidden;
      }

      .slider-wrapper {
        width: 100%;
        height: 320px;
      }

      .slider-wrapper img {
        width: 100%;
        height: 100%;
        display: block;
      }

      .slider-footer {
        height: 80px;
        background-color: rgb(100, 67, 68);
        padding: 12px 12px 0 12px;
        position: relative;
      }

      .slider-footer .toggle {
        position: absolute;
        right: 0;
        top: 12px;
        display: flex;
      }

      .slider-footer .toggle button {
        margin-right: 12px;
        width: 28px;
        height: 28px;
        appearance: none;
        border: none;
        background: rgba(255, 255, 255, 0.1);
        color: #fff;
        border-radius: 4px;
        cursor: pointer;
      }

      .slider-footer .toggle button:hover {
        background: rgba(255, 255, 255, 0.2);
      }

      .slider-footer p {
        margin: 0;
        color: #fff;
        font-size: 18px;
        margin-bottom: 10px;
      }

      .slider-indicator {
        margin: 0;
        padding: 0;
        list-style: none;
        display: flex;
        align-items: center;
      }

      .slider-indicator li {
        width: 8px;
        height: 8px;
        margin: 4px;
        border-radius: 50%;
        background: #fff;
        opacity: 0.4;
        cursor: pointer;
      }

      .slider-indicator li.active {
        width: 12px;
        height: 12px;
        opacity: 1;
      }
    </style>
  </head>

  <body>
    <div class="slider">
      <div class="slider-wrapper">
        <img src="./images/slider01.jpg" alt="" />
      </div>
      <div class="slider-footer">
        <p>对人类来说会不会太超前了?</p>
        <ul class="slider-indicator">
          <li class="active"></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
        </ul>
        <div class="toggle">
          <button class="prev">&lt;</button>
          <button class="next">&gt;</button>
        </div>
      </div>
    </div>
    <script>
      // 1. 初始数据
      const sliderData = [
        {
          url: "./images/slider01.jpg",
          title: "对人类来说会不会太超前了?",
          color: "rgb(100, 67, 68)",
        },
        {
          url: "./images/slider02.jpg",
          title: "开启剑与雪的黑暗传说!",
          color: "rgb(43, 35, 26)",
        },
        {
          url: "./images/slider03.jpg",
          title: "真正的jo厨出现了!",
          color: "rgb(36, 31, 33)",
        },
        {
          url: "./images/slider04.jpg",
          title: "李玉刚:让世界通过B站看到东方大国文化",
          color: "rgb(139, 98, 66)",
        },
        {
          url: "./images/slider05.jpg",
          title: "快来分享你的寒假日常吧~",
          color: "rgb(67, 90, 92)",
        },
        {
          url: "./images/slider06.jpg",
          title: "哔哩哔哩小年YEAH",
          color: "rgb(166, 131, 143)",
        },
        {
          url: "./images/slider07.jpg",
          title: "一站式解决你的电脑配置问题!!!",
          color: "rgb(53, 29, 25)",
        },
        {
          url: "./images/slider08.jpg",
          title: "谁不想和小猫咪贴贴呢!",
          color: "rgb(99, 72, 114)",
        },
      ];

      //2.获取元素
      const img = document.querySelector(".slider-wrapper img");
      const p = document.querySelector(".slider-footer p");
      const footer = document.querySelector(".slider-footer");
      let i = 0;
      //3.定时器
      let n = setInterval(function () {
        i++;
        img.src = sliderData[i].url;
        p.innerHTML = sliderData[i].title;
        footer.style.backgroundColor = sliderData[i].color;
        //小圆点
        //先删除以前的.active
        let active = document.querySelector(".slider-indicator .active");
        active.classList.remove("active");
        //只给当前li添加类名
        let li = document.querySelector(
          `.slider-indicator li:nth-child(${i + 1})`
        );
        li.classList.add("active");
        if (i === 7) {
          i = -1;
        }
      }, 1000);
    </script>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 ciscn WP

一、MISC 1.火锅链观光打卡 打开后连接自己的钱包&#xff0c;然后点击开始游戏&#xff0c;答题八次后点击获取NFT&#xff0c;得到有flag的图片 没什么多说的&#xff0c;知识问答题 兑换 NFT Flag{y0u_ar3_hotpot_K1ng} 2.Power Trajectory Diagram 方法1&#xff1a; 使用p…

《Programming from the Ground Up》阅读笔记:p147-p180

《Programming from the Ground Up》学习第9天&#xff0c;p147-p180总结&#xff0c;总计34页。 一、技术总结 1.Physical memeory p152, Physical memory refers to the actual RAM chips inside your computer and what they contain. 物理地址指的RAM&#xff0c;即我们…

库函数相关(上一篇补充)

一、创建自己的头文件 在当前目录下创建一个my_head.h将这个文件移动到/usr/include目录 #ifndef __MY_HEAD_H__ #define __MY_HEAD_H__#include <stdio.h> #include <errno.h> #include <string.h>#define PRINT_ERR(s) do{\printf("%s %s %d\n&quo…

minio简单使用

文章目录 简介官方地址Linux下载安装安装服务启动关闭帮助命令 java开发minio依赖包新建项目pom配置文件配置类Service测试类运行测试 Api使用前言针对桶的操作查看某个桶是否存在创建一个桶返回桶列表删除一个桶 针对文件的操作上传文件到桶中(本地文件上传)上传文件到桶中(基…

猴子吃桃-C语言

1.问题&#xff1a; 猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时&#xff0c;见只剩下一个…

【学习笔记】一种使用多项式快速计算 sin 和 cos 近似值的方法

一种使用多项式快速计算 sin 和 cos 近似值的方法 在嵌入式开发、游戏开发或其他需要快速数学计算的领域&#xff0c;sin 和 cos 函数的计算时间可能会影响程序的整体性能。特别是在对时间敏感、精度要求不高的场景中&#xff0c;传统的 sin 和 cos 函数由于依赖复杂的数值方法…

【UE】简单介绍“Extra Win Function”插件的功能

“Extra Win Function”插件包含32个C类封住成的蓝图节点供用户使用&#xff0c;下面简单介绍19个可能常用的节点的功能。 1. “Is Internet Available” 检查是否可接入互联网 2. “Get Device Platform” 获取设备平台名称 3. “Get Android Device RAMSize” 获取RAM 大小 …

【Java SE基础回顾】看这篇就够了!

JavaSE复习 参考视频&#xff1a;【狂神说Java】JavaSE阶段回顾总结 简单的就不讲了&#xff0c;比如什么break和continue区别&#xff0c;甚至一些什么什么继承封装多态的概念等等。 主要写一些Java特有的&#xff0c;重点的基础知识。主要还是例子和代码更多&#xff0c;更有…

Android Preference的使用以及解析

简单使用 values.arrays.xml <?xml version"1.0" encoding"utf-8"?> <resources><string-array name"list_entries"><item>Option 1</item><item>Option 2</item><item>Option 3</item&…

衡石分析平台系统管理手册-智能运维之系统设置

系统设置​ HENGSHI 系统设置中展示了系统运行时的一些参数&#xff0c;包括主程序相关信息&#xff0c;Base URL、HTTP 代理、图表数据缓存周期、数据集缓存大小、租户引擎等相关信息。 主程序​ 系统设置中展示了主程序相关信息&#xff0c;这些信息是系统自动生成的&#…

Linux 之 Linux应用编程概念、文件IO、标准IO

Linux应用编程概念、文件IO、标准IO 学习任务&#xff1a; 1、 学习Linux 应用开发概念&#xff0c;什么是系统调用&#xff0c;什么是库函数 2、 学习文件IO&#xff1a;包括 read、write、open、close、lseek 3、 深入文件IO&#xff1a;错误处理、exit 等 4、 学习标准IO&a…

TCP四次挥手过程详解

TCP四次挥手全过程 有几点需要澄清&#xff1a; 1.首先&#xff0c;tcp四次挥手只有主动和被动方之分&#xff0c;没有客户端和服务端的概念 2.其次&#xff0c;发送报文段是tcp协议栈的行为&#xff0c;用户态调用close会陷入到内核态 3.再者&#xff0c;图中的情况前提是双…

什么是PLM系统?PLM系统对制造业起到哪些作用?三品PLM系统对汽车制造业意义

在当今竞争激烈的制造业环境中&#xff0c;企业面临着来自市场、技术、客户需求等多方面的挑战。为了应对这些挑战&#xff0c;许多制造企业纷纷引入产品生命周期管理PLM系统&#xff0c;以实现更高效、更灵活的产品全生命周期管理。PLM系统以其独特的优势&#xff0c;在优化产…

【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分

更多AI知识点总结见我的专栏&#xff1a;【AI知识点】 AI论文精读、项目和一些个人思考见我另一专栏&#xff1a;【AI修炼之路】 有什么问题、批评和建议都非常欢迎交流&#xff0c;三人行必有我师焉&#x1f601; 简介 论文中英文名 Retrieval-Augmented Generation for Lar…

解压缩软件哪个好?不同场景下的最佳选择

解压缩软件在日常工作与生活中发挥着至关重要的作用&#xff0c;从简单的文件解压到处理大型项目&#xff0c;选择一款适合自己的解压缩软件能够大幅提高工作效率。 面对众多解压缩工具&#xff0c;如WinRAR、7-Zip、解压专家、PeaZip等&#xff0c;如何根据不同的使用场景选择…

xss-labs靶场第一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

咸鱼sign逆向分析与爬虫实现

目标&#xff1a;&#x1f41f;的搜索商品接口 这个站异步有点多&#xff0c;好在代码没什么混淆。加密的sign值我们可以通过搜索找到位置 sign值通过k赋值&#xff0c;k则是字符串拼接后传入i函数加密 除了开头的aff…&#xff0c;后面的都是明文没什么好说的&#xff0c;我…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区 9 月月报更新啦&#xff01;这里将记录 Apache DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…

postman变量,断言,参数化

环境变量 1.创建环境变量 正式环境是错误的&#xff0c;方便验证环境变化 2.在请求中添加变量 3.运行前选择环境变量 全局变量 能够在任何接口访问的变量 console中打印日志 console.log(responseBody);//将数据解析为json格式 var data JSON.parse(responseBody); conso…

qt登录界面的完善

头文件1 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPushButton> #include<QLineEdit> #include<QLabel>class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();int btn;int btn1; signal…