【QT】常用类

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:QT

在这里插入图片描述


目录

  • 👉🏻QMediaPlayer
  • 👉🏻QMediaPlaylist
    • setPlaybackMode
  • 👉🏻QDir
  • 👉🏻QFileDialog
  • 👉🏻QList
  • 👉🏻QUrl
  • 👉🏻QNetworkAccessManager
  • 👉🏻QNetworkRequest、QNetworkReply

👉🏻QMediaPlayer

🍎 基本功能

QMediaPlayer 是 Qt 框架中的一个类,用于处理音频和视频的播放。它提供了以下基本功能:

  • 播放音频和视频:能够播放各种格式的音频和视频文件。
  • 控制播放:支持播放、暂停、停止、快进、快退等控制功能。
  • 媒体信息获取:可以获取播放媒体的时长、当前播放位置等信息。
  • 音量和播放速度控制:能够设置音量和播放速度。
  • 播放状态监控:能够响应播放状态的变化,如播放完成、错误发生等。

🍎 常用方法

以下是 QMediaPlayer 的一些常用方法及其功能:

  • play():开始播放媒体。
  • pause():暂停播放。
  • stop():停止播放。
  • setMedia(const QMediaContent &media):设置要播放的媒体内容。
  • setVolume(int volume):设置音量(范围从 0 到 100)。
  • setPlaybackRate(qreal rate):设置播放速度(如 1.0 为正常速度,0.5 为半速,2.0 为双倍速)。
  • currentMedia():获取当前播放的媒体内容。
  • state():获取当前播放状态(如播放中、暂停中、停止中)。
  • duration():获取媒体的总时长(以毫秒为单位)。
  • position():获取当前播放位置(以毫秒为单位)。
  • setPosition(qint64 position):设置播放位置(以毫秒为单位)。

🍎 示例代码

下面是一个简单的示例,展示了如何使用 QMediaPlayer 播放一个音频文件:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaContent>
#include <QUrl>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建 QMediaPlayer 实例QMediaPlayer *player = new QMediaPlayer();// 设置媒体内容(音频文件路径)QMediaContent media(QUrl::fromLocalFile("/path/to/your/audiofile.mp3"));player->setMedia(media);// 设置音量(范围:0 到 100)player->setVolume(50);// 开始播放音频player->play();// 运行应用程序return a.exec();
}

🍎 进阶用法示例

下面是一个更复杂的示例,展示了如何设置播放速度、控制播放位置以及响应播放状态变化:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaContent>
#include <QUrl>
#include <QTimer>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QMediaPlayer *player = new QMediaPlayer();// 设置媒体内容(音频文件路径)QMediaContent media(QUrl::fromLocalFile("/path/to/your/audiofile.mp3"));player->setMedia(media);// 设置音量player->setVolume(70);// 设置播放速度player->setPlaybackRate(1.5); // 1.5 倍速播放// 开始播放player->play();// 设置定时器用于检查播放状态QTimer *timer = new QTimer();QObject::connect(timer, &QTimer::timeout, [player]() {qDebug() << "Current position:" << player->position();if (player->state() == QMediaPlayer::StoppedState) {qDebug() << "Playback stopped.";}});timer->start(1000); // 每秒检查一次return a.exec();
}

这个示例不仅展示了如何设置播放速度,还使用了定时器来检查播放位置和播放状态。

🍎 注意事项

  • 依赖模块:确保你的 Qt 项目包含了 Qt Multimedia 模块,并在 CMakeLists.txt.pro 文件中进行了正确配置。
  • 平台支持:不同平台对多媒体格式的支持可能有所不同,确保检查 Qt 文档以了解支持的格式和功能。
  • 错误处理:在实际应用中,考虑添加更多的错误处理代码,以提高用户体验和应用的稳定性。

👉🏻QMediaPlaylist

QMediaPlaylist 用于管理和控制多个媒体文件的播放顺序。以下是一些主要功能和常用方法:

基本功能

  • 管理媒体条目:添加、移除和操作播放列表中的媒体条目。
  • 控制播放顺序:设置播放模式,如顺序播放、随机播放或循环播放。
  • 获取播放信息:访问播放列表中的当前媒体和播放位置。

常用方法

  • addMedia(const QMediaContent &content):将媒体文件添加到播放列表。
  • removeMedia(int index):从播放列表中移除指定位置的媒体文件。
  • clear():清空播放列表。
  • setCurrentIndex(int index):设置当前播放的媒体条目索引。
  • next()previous():切换到下一个或上一个媒体条目。
  • setPlaybackMode(QMediaPlaylist::PlaybackMode mode):设置播放模式,如 Sequential, Loop, Random 等。
  • currentIndex():获取当前播放的媒体条目索引。
  • mediaCount():获取播放列表中的媒体条目数量。

示例代码

下面的示例展示了如何使用 QMediaPlaylist 来创建一个播放列表并管理其内容:

#include <QCoreApplication>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QMediaContent>
#include <QUrl>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QMediaPlayer *player = new QMediaPlayer();QMediaPlaylist *playlist = new QMediaPlaylist();// 添加媒体到播放列表playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio1.mp3")));playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio2.mp3")));playlist->addMedia(QMediaContent(QUrl::fromLocalFile("/path/to/audio3.mp3")));// 设置播放模式为随机playlist->setPlaybackMode(QMediaPlaylist::Random);// 设置当前播放的索引playlist->setCurrentIndex(0);// 将播放列表设置给播放器player->setPlaylist(playlist);// 开始播放player->play();return a.exec();
}

在这个示例中,我们创建了一个 QMediaPlaylist 对象,添加了几个媒体文件,设置了播放模式为随机,然后将其分配给 QMediaPlayer 进行播放。你可以根据需要调整播放模式和操作播放列表。

setPlaybackMode

  • QMediaPlaylist::Sequential:这是播放模式的一种,意味着播放列表中的媒体将按照它们在列表中的顺序依次播放。当当前媒体播放完毕时,播放器将自动开始播放列表中的下一个媒体,直到播放列表结束。如果播放列表中的所有媒体都播放完毕,播放器将停在最后一个媒体。

  • 其他播放模式

    • QMediaPlaylist::Loop:播放列表中的媒体将重复播放。播放完列表中的所有媒体后,播放器将重新从列表的开头开始播放。
    • QMediaPlaylist::CurrentItemInLoop:当前播放的媒体将被重复播放。播放列表中的其他媒体不会自动播放,直到手动更改。
    • QMediaPlaylist::Random:媒体将在列表中以随机顺序播放。每次播放列表中的媒体顺序都是随机的。

👉🏻QDir

QDir 是 Qt 提供的一个类,用于简化文件和目录的操作。以下是一些常见用法:

  1. 列出目录内容

    QDir dir("/path/to/directory");
    QStringList files = dir.entryList(QDir::Files);
    
  2. 获取文件信息

    QFileInfo fileInfo("/path/to/file");
    QString fileName = fileInfo.fileName();
    qint64 fileSize = fileInfo.size();
    
  3. 创建目录

    QDir dir;
    if (!dir.exists("/path/to/new/directory")) {dir.mkpath("/path/to/new/directory");
    }
    
  4. 删除目录

    QDir dir("/path/to/directory");
    dir.removeRecursively();
    
  5. 重命名文件

    QDir dir("/path/to/directory");
    dir.rename("oldName.txt", "newName.txt");
    

QDir 提供了丰富的功能来管理文件和目录,使文件系统操作更方便。

👉🏻QFileDialog

QFileDialog 是 Qt 提供的一个对话框类,用于让用户选择文件或目录。它支持多种模式和配置选项,可以用于打开、保存、选择目录等操作。以下是一些常见的用法示例:

基本用法

  1. 打开文件对话框

    #include <QFileDialog>
    #include <QWidget>QString openFile(QWidget *parent) {QString fileName = QFileDialog::getOpenFileName(parent, "Open File", "", "Files (*.*);;Text Files (*.txt);;Images (*.png *.jpg)");return fileName;
    }
    
    • parent:对话框的父窗口。
    • "Open File":对话框的标题。
    • "":默认目录路径。
    • "Files (*.*);;Text Files (*.txt);;Images (*.png *.jpg)":文件过滤器,用于筛选可见文件类型。
  2. 保存文件对话框

    #include <QFileDialog>
    #include <QWidget>QString saveFile(QWidget *parent) {QString fileName = QFileDialog::getSaveFileName(parent, "Save File", "", "Text Files (*.txt);;Images (*.png *.jpg)");return fileName;
    }
    
    • parent:对话框的父窗口。
    • "Save File":对话框的标题。
    • "":默认文件路径和名称。
    • "Text Files (*.txt);;Images (*.png *.jpg)":文件过滤器。
  3. 选择目录对话框

    #include <QFileDialog>
    #include <QWidget>QString selectDirectory(QWidget *parent) {QString directory = QFileDialog::getExistingDirectory(parent, "Select Directory", "");return directory;
    }
    
    • parent:对话框的父窗口。
    • "Select Directory":对话框的标题。
    • "":默认目录路径。

高级用法

  1. 设置对话框选项

    QFileDialog dialog(parent);
    dialog.setFileMode(QFileDialog::ExistingFiles); // 允许选择多个文件
    dialog.setNameFilters(QStringList() << "Images (*.png *.jpg)" << "Text Files (*.txt)");
    dialog.setViewMode(QFileDialog::List); // 以列表模式显示文件
    
  2. 响应用户选择

    QFileDialog dialog(parent);
    dialog.setFileMode(QFileDialog::ExistingFiles);
    if (dialog.exec()) {QStringList selectedFiles = dialog.selectedFiles();// 处理选择的文件for (const QString &file : selectedFiles) {qDebug() << file;}
    }
    
    • dialog.exec():显示对话框并等待用户操作。
    • dialog.selectedFiles():返回用户选择的文件列表(如果选择的是多个文件)。

👉🏻QList

QList 是 Qt 框架中的一个模板类,用于存储和管理一组同类型的对象。它类似于标准 C++ 的 std::vectorstd::list,但提供了更多的功能和便利性来处理 Qt 类型的数据。QList 提供了对动态数组的支持,并且可以存储任意类型的对象,只要这些对象是可拷贝的或可移动的。

基本用法

  1. 创建和初始化 QList

    #include <QList>
    #include <QString>QList<QString> stringList; // 创建一个空的 QList 对象
    

    你可以通过初始化列表或 append() 方法来初始化列表:

    QList<int> numberList = {1, 2, 3, 4, 5}; // 使用初始化列表
    
  2. 添加和插入元素

    QList<QString> stringList;
    stringList.append("Hello");    // 在末尾添加元素
    stringList.prepend("World");   // 在开头添加元素
    stringList.insert(1, "Qt");    // 在指定位置插入元素
    
  3. 访问和修改元素

    QString firstItem = stringList.at(0); // 获取第一个元素
    stringList[1] = "Changed"; // 修改第二个元素
    
    • at(index):返回指定索引位置的元素。
    • operator[]:使用下标操作符访问元素(不检查边界)。
  4. 遍历 QList

    for (const QString &str : stringList) {qDebug() << str;
    }
    

    或使用迭代器:

    for (QList<QString>::const_iterator it = stringList.constBegin(); it != stringList.constEnd(); ++it) {qDebug() << *it;
    }
    
  5. 删除元素

    stringList.removeAt(1);  // 删除指定位置的元素
    stringList.removeOne("Qt"); // 删除第一个匹配的元素
    stringList.clear();  // 删除所有元素
    
    • removeAt(index):删除指定索引位置的元素。
    • removeOne(value):删除第一个匹配的元素。
    • clear():清空所有元素。

特性

  • 动态大小QList 是一个动态数组,可以自动调整大小以适应添加或删除的元素。
  • 支持值类型和指针类型:可以存储任意类型的对象,包括 Qt 自带的类型和用户自定义的类型(需要拷贝构造函数和赋值运算符正常工作)。
  • 内存管理:对于存储指针类型的 QList,需要用户负责对象的内存管理。

👉🏻QUrl

QUrl 是 Qt 框架中的一个类,用于处理和操作 URL(统一资源定位符)。它提供了一种简单的方式来解析、构建和修改 URL,并支持处理常见的 URL 组件,如协议、主机、路径和查询参数。

基本用法

  1. 创建和解析 URL

    #include <QUrl>
    #include <QDebug>QUrl url("https://www.example.com:8080/path/to/resource?query=1#fragment");
    

    QUrl 会自动解析 URL 并将其拆分为各个部分。

  2. 访问和修改 URL 组件

    qDebug() << "Scheme:" << url.scheme();  // https
    qDebug() << "Host:" << url.host();      // www.example.com
    qDebug() << "Port:" << url.port();      // 8080
    qDebug() << "Path:" << url.path();      // /path/to/resource
    qDebug() << "Query:" << url.query();    // query=1
    qDebug() << "Fragment:" << url.fragment(); // fragmenturl.setPath("/new/path"); // 修改路径
    
  3. 构建 URL

    QUrl newUrl;
    newUrl.setScheme("http");
    newUrl.setHost("example.com");
    newUrl.setPath("/path");
    newUrl.setQuery("param=value");qDebug() << newUrl.toString(); // http://example.com/path?param=value
    
  4. 处理 URL 编码

    QString encoded = QUrl::toPercentEncoding("This is a test!");
    QString decoded = QUrl::fromPercentEncoding(encoded.toUtf8());
    
    • QUrl::toPercentEncoding():对字符串进行百分号编码。
    • QUrl::fromPercentEncoding():对百分号编码的字符串进行解码。

特性

  • 支持 URL 解析和构建:可以轻松地解析和构建 URL 的各个部分。
  • 支持 URL 编码:处理 URL 编码和解码。
  • 处理相对 URL:可以处理相对 URL 和基于基础 URL 的解析。

示例代码

#include <QCoreApplication>
#include <QUrl>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QUrl url("https://www.example.com:8080/path/to/resource?query=1#fragment");qDebug() << "Original URL:" << url.toString();qDebug() << "Host:" << url.host();qDebug() << "Port:" << url.port();url.setPath("/new/path");url.setQuery("param=value");qDebug() << "Modified URL:" << url.toString();return a.exec();
}

QUrl 提供了一种强大的方式来处理 URL,在 Qt 应用程序中,它非常有用,特别是当涉及到网络操作时。

👉🏻QNetworkAccessManager

QNetworkAccessManager 是 Qt 框架中用于处理网络请求的类。以下是其基本用法:

  1. 创建 QNetworkAccessManager 实例
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
  1. 发起网络请求

使用 QNetworkAccessManager 发起请求,可以是 GET、POST、PUT 等。以下示例演示如何发起 GET 请求:

QNetworkRequest request(QUrl("https://example.com"));
QNetworkReply *reply = manager->get(request);
  1. 处理请求结果

连接 QNetworkReply 的信号与槽来处理请求结果:

connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray responseData = reply->readAll();// 处理响应数据} else {// 处理错误qDebug() << "Error:" << reply->errorString();}reply->deleteLater();
});
  1. 发起 POST 请求

示例代码展示如何发起 POST 请求,并发送数据:

QNetworkRequest request(QUrl("https://example.com/submit"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");QByteArray postData;
postData.append("key1=value1&key2=value2");QNetworkReply *reply = manager->post(request, postData);
  1. 取消请求

你可以通过 QNetworkReply 对象取消请求:

reply->abort();
  1. 管理 SSL 证书(可选)

如果需要自定义 SSL 证书处理,可以使用 QNetworkAccessManager 的 SSL 配置功能:

connect(manager, &QNetworkAccessManager::sslErrors, [](QNetworkReply* reply, const QList<QSslError>& errors) {// 处理 SSL 错误reply->ignoreSslErrors();
});

以上是 QNetworkAccessManager 的基本用法,能够满足大多数网络请求的需求。

👉🏻QNetworkRequest、QNetworkReply

QNetworkRequest

QNetworkRequest 用于定义网络请求的配置,包括 URL、请求头和 SSL 配置等。

  • 创建请求

    QNetworkRequest request(QUrl("https://example.com"));
    
  • 设置请求头

    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    
  • 设置 SSL 配置(可选)

    QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
    request.setSslConfiguration(sslConfig);
    

QNetworkReply

QNetworkReply 用于处理网络请求的响应,包括获取数据、处理错误等。

  • 获取数据

    QByteArray responseData = reply->readAll();
    
  • 处理错误

    if (reply->error() != QNetworkReply::NoError) {qDebug() << "Error:" << reply->errorString();
    }
    
  • 连接信号与槽

    connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray responseData = reply->readAll();// 处理响应数据} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();
    });
    
  • 取消请求

    reply->abort();
    

总结:QNetworkRequest 配置请求,QNetworkReply 处理响应。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SparkSQL SET和RESET

前言 我们在用代码写spark程序的时候,如果要设置一些配置参数,可以通过: SparkConf val conf = new SparkConf().setMaster("local[2]").setAppName("CountingSheep") val sc = new SparkContext(conf)spark-submit ./bin/spark-submit --name "M…

虚幻5|知识点(1)寻找查看旋转,击打敌人后朝向主角

举例说明&#xff0c;我们想让角色一直朝着摄像头&#xff0c;我们控制角色任意位置&#xff0c;都能自行旋转都能朝向摄像头 下面是敌人一直朝向角色&#xff0c;无论主角走向哪个位置&#xff0c;敌人都能朝向主角 start是获取敌人的位置向量大小&#xff0c;Target是获取主…

使用LSTM(长短期记忆网络)模型预测股票价格的实例分析

一&#xff1a;LSTM与RNN的区别 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构。LSTM是为了解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题而设计的。 在传统的RNN中&#xff0c;信息通过隐藏状…

Android SystemUI组件(06)导航栏创建分析虚拟按键

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧SystemBars分析中导航栏部分即可。 1 导航栏创建之makeStatusBarView 通过上一篇文章的…

Java综合实践——学生成绩查询系统

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1&#xff0c;请看&#xff01; 本篇文章将带大家一起来写一个学生成绩查询系统。 目录 系统呈现效果 前…

一些硬件知识(二十二)

二极管&#xff08;Diode&#xff09;伏安特性、技术参数和项目中的应用 在正向偏置下&#xff0c;二极管呈现出良好的导电性能&#xff0c;可以允许电流通过&#xff1b;而在反向偏置下&#xff0c;二极管具有很高的阻断能力&#xff0c;几乎不允许电流通过。这是由构成二极管…

new String(),toString()和Arrays.toString()的区别

下面写了一段代码来展示结果 import javax.sound.midi.Soundbank; import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {String str "abc";System.out.println("str:"str);char[] chars st…

Linux编译器-gcc/g++使用

1. 背景知识 1. 预处理&#xff08;进行宏替换) 2. 编译&#xff08;生成汇编) 3. 汇编&#xff08;生成机器可识别代码&#xff09; 4. 连接&#xff08;生成可执行文件或库文件) 2. gcc如何完成 格式 gcc [选项] 要编译的文件 [选项] [目标文件] 预处理(进行宏替换) 编…

SSM校园二手交易平台---附源码78592

摘要 SSM校园二手交易平台是针对大学生群体而设计的一款在线交易平台。该平台的目的是为大学生提供一个便捷、安全、可靠的交易渠道&#xff0c;帮助他们买卖二手商品。平台具有以下特点&#xff1a;注重安全性&#xff1a;平台采取严格的用户认证和身份验证机制&#xff0c;确…

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09; 一种深度学习模型&#xff0c;通过判别模型&#xff08;Discriminative Model&#xff09;和生成模型&#xff08;Generative Model&#xff09;的相互博弈学习&#xff0c;生成接近真实数据的数据分…

html 引入 css文档

1. 三种方法 html 引入 css文档有三种方式&#xff1a; 1.1 内部样式表 1.2 外部样式表 1.3 行内样式表

python 学习一张图

python学习一张图&#xff0c;python的特点的是学的快&#xff0c;一段时间不用&#xff0c;忘记的也快&#xff0c;弄一张图及一些入门案例吧。 写一个简单的测试&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…

【深度学习】Pytorch基础

目录 梯度下降算法&#xff08;Gradient Descent&#xff09;代码实现 梯度下降算法&#xff08;Gradient Descent&#xff09; 梯度下降算法在机器学习中应用十分的广泛&#xff0c;不论是在线性回归还是Logistic回归中&#xff0c;它的主要目的是通过迭代找到目标函数的最小…

企业会议室预约管理系统

基于springbootvuemysql实现的企业会议室预约管理系统&#xff08;源码数据库部署视频&#xff09; ### 主要技术 SpringBoot、Vue、MySQL ### 系统角色 员工、管理员 ### 系统功能 1&#xff09;管理员&#xff1a;数据统计&#xff08;会议室使用统计-柱状图、设备状态统计…

通过IDEA的Maven插件清理maven依赖缓冲

问题 有时候&#xff0c;在IDEA编程的时候&#xff0c;会遇到2个服务都依赖同一个模块&#xff0c;但是&#xff0c;其中有1个服务没有生效&#xff0c;但是&#xff0c;在CLI的maven中检查依赖树&#xff0c;没有任何问题&#xff0c;但是在IDEA中那个服务始终就是没有生效。…

计算语言学(一)基础

概率论的几个概念 熵、互信息 神经网络基础 MLP CNN RNN Seq2Seq LSTM Transformer 语料库与知识库

世界时钟 做外贸的朋友你需要这么一个看时间的工具

有很多人需要经常查看世界各地的时间&#xff0c;以前的办法就是去网上找时间&#xff0c;一个个对一下&#xff0c;这样是比较麻烦的&#xff0c;而且效率也非常低。 其实我们可以非常智能的管理这些时间时钟&#xff0c;让你更直观的&#xff0c;便捷的了解世界各地时间。 …

TESSY创建以及设计一个测试用例

我们以tessy5.1 IDE为例&#xff0c;给大家展示编写一个测试用例的过程。 还不会创建工程的&#xff0c;可以参考以下这篇文章&#xff1a; TESSY创建单元测试或集成测试工程_tessy 集成测试-CSDN博客 接下来我们以这个作为开始状态进行介绍 1、添加源文件 2、添加头文件路径…

Vulnhub-RickdiculouslyEasy靶场(9个flag)

flag1 端口9090有一个flag flag2 13337端口 flag3 使用dirb进行扫描网站的80端口&#xff0c;发现一些敏感文件 访问80端口&#xff0c;没有发现有效信息 访问passwords目录 访问FLAG.txt 再返回访问passwords.html文件 查看页面源代码发现一个密码 flag4 之前扫描到了robo…

一些硬件知识(二十)

单端差动放大器并不是指“单输入单输出”。它的意思是&#xff1a;输入端为差分输入&#xff0c;而输出为单端输出。 低压差线性稳压器&#xff08;LDO&#xff0c;Low Dropout Regulator&#xff09;是一种常见的线性稳压器&#xff0c;具有低输入输出电压差的特点&#xff0c…