qt-C++笔记之QLabel加载图片

news2024/11/18 18:24:59

qt-C++笔记之QLabel加载图片

—— 2024-04-06 夜


code review!

文章目录

  • qt-C++笔记之QLabel加载图片
    • 0.文件结构
    • 1.方法一:把图片放在项目路径下,在 .pro 文件中使用 DISTFILES添加图片文件
      • 1.1.运行
      • 1.2.qt_test.pro
      • 1.3.main.cpp
    • 2.方法二:不在 .pro 文件中使用 DISTFILES添加图片文件,直接在main.cpp中指定图片路径
      • 2.1.main.cpp
      • 2.2.附加解释
    • 3.方法三:上述方法中直接使用图片去构造QPixmap对象,若使用 QPixmap 的 load() 方法来加载图片
      • 3.1.运行
      • 3.2.main.cpp
      • 3.2.附加解释
    • 4.上述代码中只有QLabel和QPixmap,若结合QImage来显示图片
      • 4.1.运行
      • 4.2.main.cpp
      • 4.3.附加解释
      • 4.4.代码流程图
      • 4.5.`QImage`和`QPixmap`表格对比
    • 5.视频流解码的图像数据需要使用的函数:QPixmap::fromImage()
    • 6.Qt在加载的图片上的指定位置画矩形框:创建一个 QPainter 实例并在 QPixmap 上绘制矩形
      • 6.1.运行
      • 6.2.main.cpp
    • 7.`setScaledContents`和`scaled`方法表格对比

0.文件结构

在这里插入图片描述

1.方法一:把图片放在项目路径下,在 .pro 文件中使用 DISTFILES添加图片文件

1.1.运行

在这里插入图片描述

1.2.qt_test.pro

QT += widgets core
TARGET = qt_test
TEMPLATE = app
SOURCES += main.cpp

DISTFILES += \
    123.jpg

1.3.main.cpp

#include <QApplication>
#include <QLabel>
#include <QPixmap>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QLabel label;
    QPixmap pixmap("123.jpg"); 

    label.setPixmap(pixmap);
    label.show();

    return app.exec();
}

2.方法二:不在 .pro 文件中使用 DISTFILES添加图片文件,直接在main.cpp中指定图片路径

2.1.main.cpp

#include <QApplication>
#include <QLabel>
#include <QPixmap>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QLabel label;
    QPixmap pixmap("/home/user/qt_cpp_test/qt_test/123.jpg"); // 替换为图片文件路径

    label.setPixmap(pixmap);
    label.show();

    return app.exec();
}

2.2.附加解释

  1. QPixmap是用于处理图像的类,它可以加载和显示许多不同格式的图片。
  2. 使用QPixmap的构造函数来加载一个图片文件。
  3. 使用QLabelsetPixmap方法将图片设置到标签上。
  4. 最后调用show方法来显示带有图片的标签。

确保替换"/path/to/image.jpg"为实际图片文件的路径。如果图片文件路径不正确或文件不存在,QPixmap对象将是一个空对象,并且QLabel不会显示任何图片。

此外,如果图片大小超过QLabel的大小,那么图片将会被裁剪。如果想让图片自适应QLabel的大小,可以使用QPixmap::scaled方法来调整图片尺寸。例如:

label.setPixmap(pixmap.scaled(label.size(), Qt::KeepAspectRatio));

这会将图片缩放到QLabel的大小,同时保持图片的宽高比。Qt::KeepAspectRatio是一个枚举值,指示应保持原始图像的宽高比。

3.方法三:上述方法中直接使用图片去构造QPixmap对象,若使用 QPixmap 的 load() 方法来加载图片

3.1.运行

在这里插入图片描述

3.2.main.cpp

#include <QApplication>
#include <QLabel>
#include <QPixmap>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QLabel label;
    QPixmap pixmap;

    // 尝试加载图片,替换为图片文件路径
    bool loaded = pixmap.load("123.jpg");

    if (loaded) {
        // 如果图片加载成功,设置到QLabel
        label.setPixmap(pixmap);
    } else {
        // 如果加载失败,可以设置一个错误消息
        label.setText("图片加载失败!");
    }

    label.show();

    return app.exec();
}

3.2.附加解释

使用 QPixmapload() 方法来加载图片,可以先创建一个 QPixmap 对象,然后调用 load() 方法来加载图片文件。这种方式可以方便地检查图片是否成功加载,因为 load() 方法会返回一个布尔值,指示操作是否成功。

在这段代码中:

  • 创建了一个 QPixmap 对象。
  • 调用 load() 方法尝试加载指定路径下的图片文件。
  • load() 方法返回 true 如果图片成功加载,否则返回 false
  • 如果图片加载成功,则使用 setPixmap() 方法将其设置到 QLabel 上。
  • 如果图片加载失败,则 QLabel 显示一条错误消息。

想处理加载失败的情况,可以在 else 块中添加适当的代码来通知用户或记录错误。

4.上述代码中只有QLabel和QPixmap,若结合QImage来显示图片

4.1.运行

在这里插入图片描述

4.2.main.cpp

#include <QApplication>
#include <QLabel>
#include <QPixmap>
#include <QImage>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QLabel label;
    QImage image;

    // 尝试加载图片,替换为图片文件路径
    bool loaded = image.load("/path/to/image.jpg");

    if (loaded) {
        // 如果图片加载成功,转换为QPixmap并设置到QLabel
        QPixmap pixmap = QPixmap::fromImage(image);
        label.setPixmap(pixmap);
    } else {
        // 如果加载失败,可以设置一个错误消息
        label.setText("图片加载失败!");
    }

    label.show();

    return app.exec();
}

4.3.附加解释

QImage 是Qt中另一个处理图像的类。与 QPixmap 相比,QImage 更适合图像的离屏处理,例如图像的像素级操作。而 QPixmap 更适合屏幕显示和绘制。

如果想在上述例子中使用 QImage,可以首先加载图像到一个 QImage 对象中,然后将其转换为 QPixmap 来为 QLabel 设置。

在这段代码中:

  • 创建了一个 QImage 对象。
  • 使用 load() 方法加载图片文件到 QImage 对象中。
  • 如果图片成功加载,使用静态方法 QPixmap::fromImage()QImage 转换为 QPixmap
  • 然后使用 setPixmap() 方法将 QPixmap 设置到 QLabel 上。
  • 如果图片加载失败,则 QLabel 显示错误消息。

这种方法允许在将图像显示在 QLabel 之前,利用 QImage 提供的功能对图像进行处理。例如,可以修改图像的大小,应用滤镜,调整颜色等。记住,所有这些操作都应该在将 QImage 转换为 QPixmap 之前完成。

4.4.代码流程图

+----------------+         +-----------------------+         +----------------+         +-----------------+         +-----------------------+         +------------------+
|     Start      |         |  创建 QApplication    |         |   创建 QLabel   |         |  创建 QImage    |         | 加载图片到 QImage     |         |   加载成功?       |
+----------------+         +-----------------------+         +----------------+         +-----------------+         +-----------------------+         +--------+---------+
         |                              |                              |                              |                              |                    Yes / No
         |                              |                              |                              |                              |                  /          \
         v                              v                              v                              v                              v                /            \
+----------------+         +-----------------------+         +----------------+         +-----------------+         +-----------------------+      +-------v-------+   +-----------------+
| 创建 QApplication |  --->  |   创建 QLabel         |  --->  |  创建 QImage     |  --->  | 加载图片到 QImage   |  --->  |  image.load(...)       |  --->  |  从 QImage      |   | 设置 QLabel 文本 |
+----------------+         +-----------------------+         +----------------+         +-----------------+         +-----------------------+      |  创建 QPixmap   |   | "图片加载失败!" |
         |                              |                              |                              |                              |                  +-----------------+
         |                              |                              |                              |                              |                    /
         v                              v                              v                              v                              v                  /
+----------------+         +-----------------------+         +----------------+         +-----------------+         +-----------------------+        /
|  显示 QLabel     |  <---  |  设置 QLabel 的       |  <---  |  设置 QLabel 的       |  <---  |  加载图片到 QLabel    |  <------------------------+       /
+----------------+         |  QPixmap               |         |  QPixmap               |         |  image.load(...)       |                                   /
         |                              +-----------------------+         +----------------+         +-----------------------+                                  /
         |                                                                                                                                                /
         v                                                                                                                                              /
+----------------+                                                                                                                                     /
| 进入事件循环     |                                                                                                                                /
| app.exec()     |                                                                                                                               /
+----------------+                                                                                                                              /
         |                                                                                                                                     /
         v                                                                                                                                    /
+----------------+                                                                                                                           /
|      End       |                                                                                                                          /
+----------------+-------------------------------------------------------------------------------------------------------------------------+

图片版
在这里插入图片描述

4.5.QImageQPixmap表格对比

在Qt框架中,QImageQPixmap 都用于处理图像,但它们各自有不同的优化点和用途。

特性 / 用途QImageQPixmap
基本描述用于图像的处理和转换;更像是图像数据的容器。用于在屏幕上显示图像;优化了绘制速度。
颜色深度支持多种颜色格式和颜色深度。通常与显示系统的颜色深度匹配。
性能对图像进行操作(如旋转、缩放)时性能较低。绘制到屏幕上时性能较高,因为它是为显示优化的。
硬件加速通常不使用硬件加速。使用硬件加速绘制到屏幕,因此在显示时更快。
图像处理提供像素级访问,适用于图像的处理和分析。不方便直接操作像素。
文件交互读取和写入图像文件时常用,可以直接从文件加载和保存。一般不直接用于读写文件,通常通过QImage加载后转换为QPixmap进行显示。
内存使用可以更高效地使用内存,特别是使用非本机格式时。内存使用可能更高,因为它存储的是屏幕格式的数据。
透明度处理支持alpha通道,可以处理图像的透明度。同样支持alpha通道。
网络传输用于网络传输或图像处理时更加合适,因为它能够以不同的格式存储和处理图像数据。通常不用于网络传输。
线程安全可以在非GUI线程中创建和修改。必须在GUI线程中创建,因为它涉及到与显示硬件的交互。
使用场景示例- 创建图像编辑应用时
- 对图像进行分析处理
- 在后台线程处理图像
- 在窗口或者控件中快速显示图像
- 当图像不需要在多个颜色空间中变换时使用

在实际开发中,选择 QImage 还是 QPixmap 取决于具体需求。如果需要处理图像数据(如过滤、变换等),QImage 是更好的选择。如果主要需求是在Qt的窗口系统中快速显示图像,QPixmap 是更合适的。有时可能需要在两者之间转换,例如,可能会从文件中加载一个图像到 QImage 中进行处理,然后将其转换为 QPixmap 以快速显示在屏幕上。

5.视频流解码的图像数据需要使用的函数:QPixmap::fromImage()

如果正在处理视频流,并且有解码后的图像数据,通常会得到一个 QImage 或者一个原始的图像数据缓冲区。如果经有了一个 QImage 实例,可以使用 QPixmap::fromImage() 方法来将其转换为 QPixmap,从而能够在 QLabel 上显示它。

当从视频流中解码图像时,可能直接得到原始的帧数据,比如一个字节数组。在这种情况下,可以先创建一个 QImage 对象,然后使用该对象的构造函数或者 loadFromData 方法来从原始数据创建图像。一旦有了一个 QImage 对象,就可以像之前一样将其转换为 QPixmap 并将其显示在 QLabel 上。

以下是一个简化的例子,说明如何从视频流中的原始数据创建 QImage 并将其转换为 QPixmap

#include <QApplication>
#include <QLabel>
#include <QImage>
#include <QPixmap>

// 假设这是从视频解码得到的原始图像数据
const uchar *videoFrameData = ...; // 视频帧的原始数据指针
int videoFrameWidth = ...; // 视频帧的宽度
int videoFrameHeight = ...; // 视频帧的高度
QImage::Format format = ...; // 视频帧数据的格式

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QLabel label;

    // 从原始数据创建QImage
    QImage image(videoFrameData, videoFrameWidth, videoFrameHeight, format);

    // 将QImage转换为QPixmap
    QPixmap pixmap = QPixmap::fromImage(image);

    // 设置QLabel以显示QPixmap
    label.setPixmap(pixmap);
    label.show();

    return app.exec();
}

在这段代码中:

  • videoFrameData 是一个指向视频帧原始数据的指针。
  • videoFrameWidthvideoFrameHeight 分别是视频帧的宽度和高度。
  • format 是一个 QImage::Format 枚举值,指定了原始数据的格式。

QImage 的构造函数接受这些参数来创建图像对象。然后,可以使用 QPixmap::fromImage() 方法将 QImage 转换为 QPixmap,接着将其设置到 QLabel 上以供显示。

请注意,确保原始数据在 QImage 存在的整个生命周期内都是有效的,除非在创建 QImage 时使用了深拷贝。此外,确保数据的格式与 QImage 支持的格式相匹配。如果格式不匹配,图像可能无法正确显示。

6.Qt在加载的图片上的指定位置画矩形框:创建一个 QPainter 实例并在 QPixmap 上绘制矩形

6.1.运行

在这里插入图片描述

6.2.main.cpp

#include <QApplication>
#include <QLabel>
#include <QPixmap>
#include <QPainter>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 加载图片
    QPixmap pixmap("123.jpg"); // 替换为你的图片文件路径

    // 创建 QPainter 绘制在 QPixmap 上
    QPainter painter(&pixmap);
    painter.setPen(QPen(Qt::red, 3)); // 设置画笔为红色,线宽为3
    painter.drawRect(30, 40, 100, 100); // 在(10,10)位置绘制一个100x100的矩形框
    painter.end(); // 结束绘画

    // 将绘制好的 QPixmap 设置给 QLabel
    QLabel label;
    label.setPixmap(pixmap);
    label.show();

    return app.exec();
}

7.setScaledContentsscaled方法表格对比

在Qt框架中,setScaledContentsQWidget 的一个属性,通常用于 QLabel 或其他控件中,以指定是否应该缩放控件的内容以填充控件的大小。而 scaled 方法是 QPixmapQImage 类中的一个函数,用于创建原始图像的缩放版本。

特性 / 用途setScaledContentsscaled 方法
所属类QWidgetQPixmap / QImage
类型属性/函数函数
功能决定是否自动缩放控件内容以适应控件的大小。返回图像的缩放副本。
用法控件使用 setScaledContents(true) 来开启内容缩放。调用 scaled 方法并传入新的尺寸,可选地指定缩放模式和质量。
缩放时机控件大小变化时自动缩放内容。当你调用方法时手动创建一个缩放后的图像副本。
返回值无返回值,是一个设置属性的过程。返回缩放后的 QPixmap 或 QImage 副本。
性能对于频灁变化大小的控件可能会影响性能,因为每次大小改变都会触发重新缩放。缩放操作可能会消耗时间,特别是对于大图像和高质量缩放。
质量控制通常没有直接的质量控制选项,依赖于控件的实现。可以指定缩放模式,例如 Qt::SmoothTransformation 提高缩放质量。
适用场景- 当你希望 QLabel 或其他控件自动管理内容的缩放。
- 简单的UI元素缩放。
- 当你需要对图像进行一次性的缩放处理。
- 复杂的图像处理。
实现方式通过设置控件的属性来实现。通过调用方法并传递参数来实现。
内存管理不会创建新的图像副本,但频繁更新可能导致性能问题。创建一个新的图像副本,可能会增加程序的内存使用。
线程安全性属性设置通常需要在GUI线程中完成。QImagescaled 方法可以在非GUI线程中使用。
可扩展性适用于任何 QWidget 派生的控件,但不提供缩放逻辑的自定义。允许通过不同的参数来微调缩放的结果,更灵活。
例子myLabel->setScaledContents(true);QPixmap scaledPixmap = originalPixmap.scaled(newWidth, newHeight);

总结:

  • setScaledContents 是一个控件属性,用于自动调整内容大小以适应控件的尺寸变化。
  • scaledQPixmapQImage 对象的一个方法,用于生成指定大小的缩放副本,它允许更多的控制,如缩放模式和质量选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hydra九头蛇

一、hydra简介 Hydra是一款非常强大的暴力破解工具&#xff0c;它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra是一个验证性质的工具&#xff0c;主要目的是&#xff1a;展示安全研究人员从远程获取一个系统认证权限。 目前该工具支持以下协议的爆破&#xff1a; A…

快速理解JS中的原型和原型链

快速理解JS中的原型和原型链 在我们学习JS的过程中&#xff0c;我们总会接触到一些词&#xff1a;“原型”&#xff0c;“原型链”。那么今天我就来带大家来学习学习原型和原型链的知识吧&#xff01; 在开始之前&#xff0c;我们明确一下我们接下来想要学习的目标&#xff1a…

Redis从入门到精通(八)Redis实战(五)分布式锁误删与原子性问题、Redisson

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.4 分布式锁4.4.4 分布式锁的误删问题4.4.4.1 问题说明4.4.4.2 解决方案4.4.4.3 代码实现 4.4.5 Redis分布式锁的原子性问题4.4.5.1 问题说明4.4.5.2 解决方案4.4.5.3 代码实现 4.4.6 分布式锁小结 4.5 分布式锁-R…

C++要点细细梳理(下)(内存分配、异常处理、template和文件读写)

4. 类动态内存分配 4.1 C语言动态内存分配&#xff1a;malloc和free 4.2 C动态内存分配&#xff1a;new和delete 思考&#xff1a;定义一个对象和定义一个普通变量有何区别? 普通变量:分配足够空间即可存放数据对象:除了需要空间&#xff0c;还要构造/析构 类比&#xff1a;…

windows下部署mongoDB

目录 1. 下载zip安装包并解压&#xff1a;Download MongoDB Community Server | MongoDB 2. 在解压后的文件夹中新建文件夹data及下级文件夹db和log 3. 新建一个mongod.cfg文件&#xff0c;并配置以下内容 4. 在cmd中启动mongodb&#xff0c;并进行验证 5. 部署到本地服务器…

物联网实战--驱动篇之(二)Modbus协议

目录 一、modbus简介 二、功能码01、02 三、modbus解析 四、功能码03、04 五、功能码05 六、功能码06 七、功能码16 一、modbus简介 我们在网上查阅modbus的资料发现很多很杂&#xff0c;modbus-RTU ASCII TCP等等&#xff0c;还有跟PLC结合的&#xff0c;地址还分1开…

WCH恒沁单片机-CH32V307学习记录2----FreeRTOS移植

RISC-V 单片机 FreeRTOS 移植 前面用了 5 篇博客详细介绍了 FreeRTOS 在 ARM Cortex-M3 MCU 上是如何运行的。 FreeRTOS从代码层面进行原理分析系列 现在我直接用之前的 RISC-V MCU 开发板子&#xff08;CH32V307VCT6&#xff09;再次对 FreeRTOS 进行移植&#xff0c;其实也…

《图解Vue3.0》- 调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能&#xff0c;掌握了这项技能&#xff0c;可以很好的定义bug所在。一般在开发vue3项目时&#xff0c;有三种方式。 代码中添加debugger;使用浏览器调试&#xff1a;sourcemap需启用vs code 调试&#xff1a;先开启node服…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

VMwear桥接网络正确配置+静态IP设置

1.桥接网络配置 很多时候在VMware安装完虚拟机之后&#xff0c;会发现配置的桥接网络没有起作用&#xff0c;如果是Linux下输入ifconfig发现只有ipv6的地址而没有ipv4&#xff0c;说明没有桥接没有启用成功&#xff0c;需要按照以下方式来设置 在VMware的左上角打开编辑&#…

注解式 WebSocket - 构建 群聊、单聊 系统

目录 前言 注解式 WebSocket 构建聊天系统 群聊系统&#xff08;基本框架&#xff09; 群聊系统&#xff08;添加昵称&#xff09; 单聊系统 WebSocket 作用域下无法注入 Spring Bean 对象&#xff1f; 考虑离线消息 前言 很久之前&#xff0c;咱们聊过 WebSocket 编程式…

Nuxt 3 项目中配置 Tailwind CSS

官方文档&#xff1a;https://www.tailwindcss.cn/docs/guides/nuxtjs#standard 安装 Tailwind CSS 及其相关依赖 执行如下命令&#xff0c;在 Nuxt 项目中安装 Tailwind CSS 及其相关依赖 npm install -D tailwindcss postcss autoprefixerpnpm install -D tailwindcss post…

字符迁移.

3.字符迁移【算法赛】 - 蓝桥云课 (lanqiao.cn) 问题描述 小蓝最近获得了一个长度为N 的字符串S&#xff0c;他对它爱不释手。 小桥为了考验小蓝对字符串的处理能力&#xff0c;决定给他提出一个挑战&#xff0c;她会进行 Q次操作&#xff1a; 每次操作给定三个整数 l , r , k …

Vue3调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能&#xff0c;掌握了这项技能&#xff0c;可以很好的定义bug所在。一般在开发vue3项目时&#xff0c;有三种方式。 代码中添加debugger;使用浏览器调试&#xff1a;sourcemap需启用vs code 调试&#xff1a;先开启node服…

夯实智慧新能源数据底座,TiDB Serverless 在 Sandisolar+ 的应用实践

本文介绍了 SandiSolar通过 TiDB Serverless 构建智慧新能源数据底座的思路与实践。作为一家致力于为全球提供清洁电力解决方案的新能源企业&#xff0c;SandiSolar面临着处理大量实时数据的挑战。为了应对这一问题&#xff0c;SandiSolar选择了 TiDB Serverless 作为他们的数据…

PostgrerSQL基本使用与数据备份

前言 上篇了解了 PostgrerSQL 数据库的部署PostgreSQL关系型数据库介绍与部署-CSDN博客&#xff0c;本篇将继续就其基本操作、备份与还原内容做相关介绍。 目录 一、数据库的操作 1. 本机登录 2. 开启远程登录 2.1 开放远程端口 2.2 编辑配置文件 2.3 修改配置密码 2.…

基于单片机高压输电线路微机保护系统设计

**单片机设计介绍&#xff0c;基于单片机高压输电线路微机保护系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机高压输电线路微机保护系统设计是一个涉及电力系统继电保护的复杂工程。该系统主要利用单片机作为控制核心&…

【深度学习】海洋生物数据集,图片分类

文章目录 任务描述数据收集数据处理模型训练指标评测web app代码和帮助 任务描述 收集9种以上的海洋生物图片&#xff0c;然后基于深度学习做一个分类模型&#xff0c;训练完成后&#xff0c;分类模型就可以对未知图片进行分类。 在之后随便传一张图片&#xff0c;分类模型就…

MySQL 50 道查询题汇总,足以巩固大部分查询(附带数据准备SQL、题型分析、演示、50道题的完整SQL)

目录 MySQL 50 道查询题&#xff0c;足以巩固大部分查询数据准备&#xff1a;创建表sql添加表数据sql 50道查询题目汇总01 - 05 题&#xff1a;1、查询 “01” 语文成绩比 “02” 数学成绩高的学生的信息及课程分数2、查询 "01语文课程"比"02数学课程"成绩…

【前端】JavaScript(概念+语法+形式+变量+数组+函数+作用域)

文章目录 JavaScript一、JavsScript概念1.JavaScript的开发方向2.JavaScript和CSS、HTML的关系3.JavaScript运行过程4.JavaScript的组成 二、JavaScript的语法1.JS的书写形式1.行内式2.内嵌式3.外部式4.注释5.输入输出1.prompt和alert2.输出: console.log 2.变量的使用1.创建变…