【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 提供的一个类,用于简化文件和目录的操作。以下是一些常见用法:
-
列出目录内容:
QDir dir("/path/to/directory"); QStringList files = dir.entryList(QDir::Files); -
获取文件信息:
QFileInfo fileInfo("/path/to/file"); QString fileName = fileInfo.fileName(); qint64 fileSize = fileInfo.size(); -
创建目录:
QDir dir; if (!dir.exists("/path/to/new/directory")) {dir.mkpath("/path/to/new/directory"); } -
删除目录:
QDir dir("/path/to/directory"); dir.removeRecursively(); -
重命名文件:
QDir dir("/path/to/directory"); dir.rename("oldName.txt", "newName.txt");
QDir 提供了丰富的功能来管理文件和目录,使文件系统操作更方便。
👉🏻QFileDialog
QFileDialog 是 Qt 提供的一个对话框类,用于让用户选择文件或目录。它支持多种模式和配置选项,可以用于打开、保存、选择目录等操作。以下是一些常见的用法示例:
基本用法
-
打开文件对话框
#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)":文件过滤器,用于筛选可见文件类型。
-
保存文件对话框
#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)":文件过滤器。
-
选择目录对话框
#include <QFileDialog> #include <QWidget>QString selectDirectory(QWidget *parent) {QString directory = QFileDialog::getExistingDirectory(parent, "Select Directory", "");return directory; }parent:对话框的父窗口。"Select Directory":对话框的标题。"":默认目录路径。
高级用法
-
设置对话框选项
QFileDialog dialog(parent); dialog.setFileMode(QFileDialog::ExistingFiles); // 允许选择多个文件 dialog.setNameFilters(QStringList() << "Images (*.png *.jpg)" << "Text Files (*.txt)"); dialog.setViewMode(QFileDialog::List); // 以列表模式显示文件 -
响应用户选择
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::vector 或 std::list,但提供了更多的功能和便利性来处理 Qt 类型的数据。QList 提供了对动态数组的支持,并且可以存储任意类型的对象,只要这些对象是可拷贝的或可移动的。
基本用法
-
创建和初始化
QList#include <QList> #include <QString>QList<QString> stringList; // 创建一个空的 QList 对象你可以通过初始化列表或
append()方法来初始化列表:QList<int> numberList = {1, 2, 3, 4, 5}; // 使用初始化列表 -
添加和插入元素
QList<QString> stringList; stringList.append("Hello"); // 在末尾添加元素 stringList.prepend("World"); // 在开头添加元素 stringList.insert(1, "Qt"); // 在指定位置插入元素 -
访问和修改元素
QString firstItem = stringList.at(0); // 获取第一个元素 stringList[1] = "Changed"; // 修改第二个元素at(index):返回指定索引位置的元素。operator[]:使用下标操作符访问元素(不检查边界)。
-
遍历
QListfor (const QString &str : stringList) {qDebug() << str; }或使用迭代器:
for (QList<QString>::const_iterator it = stringList.constBegin(); it != stringList.constEnd(); ++it) {qDebug() << *it; } -
删除元素
stringList.removeAt(1); // 删除指定位置的元素 stringList.removeOne("Qt"); // 删除第一个匹配的元素 stringList.clear(); // 删除所有元素removeAt(index):删除指定索引位置的元素。removeOne(value):删除第一个匹配的元素。clear():清空所有元素。
特性
- 动态大小:
QList是一个动态数组,可以自动调整大小以适应添加或删除的元素。 - 支持值类型和指针类型:可以存储任意类型的对象,包括 Qt 自带的类型和用户自定义的类型(需要拷贝构造函数和赋值运算符正常工作)。
- 内存管理:对于存储指针类型的
QList,需要用户负责对象的内存管理。
👉🏻QUrl
QUrl 是 Qt 框架中的一个类,用于处理和操作 URL(统一资源定位符)。它提供了一种简单的方式来解析、构建和修改 URL,并支持处理常见的 URL 组件,如协议、主机、路径和查询参数。
基本用法
-
创建和解析 URL
#include <QUrl> #include <QDebug>QUrl url("https://www.example.com:8080/path/to/resource?query=1#fragment");QUrl会自动解析 URL 并将其拆分为各个部分。 -
访问和修改 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"); // 修改路径 -
构建 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 -
处理 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 框架中用于处理网络请求的类。以下是其基本用法:
- 创建
QNetworkAccessManager实例
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
- 发起网络请求
使用 QNetworkAccessManager 发起请求,可以是 GET、POST、PUT 等。以下示例演示如何发起 GET 请求:
QNetworkRequest request(QUrl("https://example.com"));
QNetworkReply *reply = manager->get(request);
- 处理请求结果
连接 QNetworkReply 的信号与槽来处理请求结果:
connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray responseData = reply->readAll();// 处理响应数据} else {// 处理错误qDebug() << "Error:" << reply->errorString();}reply->deleteLater();
});
- 发起 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);
- 取消请求
你可以通过 QNetworkReply 对象取消请求:
reply->abort();
- 管理 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 处理响应。
相关文章:
【QT】常用类
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QMediaPlayer👉🏻QMediaPlaylistsetPlaybackMode 👉🏻QDir👉…...
从index_put出发全面学习cuda和pytorch技术
一 前言 深感目前对于cuda和pytorch所涉及知识的广度和深度,但一时又不知道该如何去学习,经过多日的考虑,还是决定管中窥豹,从一个算子出发,抽丝剥茧,慢慢学习,把学习中碰到的问题都记录下来,希望可以坚持下去。 二 函数功能描述 【torch算子】torch.index_put和tor…...
浅谈住房城乡建设部科技创新平台布局重点方向
最近住房建设部组织开展住房城乡建设部科技创新平台(以下简称部科技创新平台)申报工作。详细内容见住房城乡建设部科技创新平台开始申报了 (qq.com)。在这里有4大方向共15个课题。内容见下图: 虽然我是做技术的,但是如何体现创新还…...
调用 write()函数后,如何知道数据是否已经写入磁盘?
在 Linux 中调用 write() 函数后,可以通过以下几种方式来确定数据是否已经写入磁盘: 一、使用同步函数 1. fsync() 函数: - 这个函数会强制将与文件描述符相关的所有修改过的内核缓冲区写入磁盘,并等待直到磁盘 I/O 操作完…...
策略路由与路由策略的区别
🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一、主体不同 二、方式不同 三、规则不同 四、定义和基本概念 一、主体不同 1、路由策略:是为了改…...
从底层原理上理解ClickHouse 中的稀疏索引
稀疏索引(Sparse Indexes)是 ClickHouse 中一个重要的加速查询机制。与传统数据库使用的 B-Tree 或哈希索引不同,ClickHouse 的稀疏索引并不是为每一行数据构建索引,而是为数据存储的块或部分数据生成索引。这种索引的核心思想是通…...
xtu oj 锐角三角形
锐角三角形 题目描述 n条边,任选3条边,能组成多少个锐角三角形(选的边不同就认为是不同的三角形)? 输入 第一个是一个整数T(1≤T≤1000),表示样例的个数。 每个样例占2行,第一行是一…...
MATLAB系列04:循环结构
MATLAB系列04:循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构 循环(loop)是一种 MATLAB …...
虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统
欢迎关注虹科,为您提供最新资讯! #LIN/CAN总线 #零部件测试 #CAN数据 导读 在汽车制造业中,零部件的安全性、功能性和可靠性是确保车辆整体性能的关键。虹科针对车辆零部件的LIN/CAN总线仿真测试,提出了基于虹科Baby-LIN系列产…...
【加密算法基础——AES CBC模式代码解密实践】
AES 解密实践之代码实现 AES 解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。 实…...
【ViT+Dis】Deepfake Detection Scheme Based on Vision Transformer and Distillation
文章目录 Deepfake Detection Scheme Based on Vision Transformer and Distillationkey points深伪检测检测算法蒸馏法与教师网络实验训练:参数总结Deepfake Detection Scheme Based on Vision Transformer and Distillation 会议:2021 作者: key points 以往基于CNN结…...
maya-vray渲染蒙版
要用一个叫vrayMulWrapper的材质球,把alpha Conterbution调到-1,勾选matte surface启用蒙版物体。...
计网简简单单复习一下
文章目录 基础体系结构(分层模型)为什么要分层?OSI 七层模型?每一层的作用?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议每一层常见协议有哪些?从输入 URL 到页面展示到底发生了什么?URI和URL的区别;forward和redirect的区别DNS作用是什么?D…...
PyQt5-loading-圆环加载效果
效果预览 代码实现 from PyQt5.QtCore import QSize, pyqtProperty, QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QColor, QPainter from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayoutclass Cir…...
RabbitMQ Spring客户端使用
注解声明式队列和交换机 java自带序列化工具类,将java对象序列化为字节数组,用于网络传输。 jdk序列号存在缺陷,(不安全,占用空间大等) 推荐使用JSON的序列化: springboot扫描包使配置生效&…...
Arduino IDE离线配置第三方库文件-ESP32开发板
简洁版可以使用uget等,将文件下载到对应文件夹下,然后安装。 esp32之arduino配置下载提速 录屏 Arduino IDE离线配置第三方库文件ESP32 资源 Linux https://download.csdn.net/download/ZhangRelay/89749063 第三方开发板 非默认支持的开发板 linu…...
Node.js 安装及项目实践
node.js安装 node安装,选择版本 一直next,或者自己修改路径,添加两个包 选择自己的安装的node的路径,cmd或者winr cmd 显示node与npm的版本号 node -vnpm -v可以跟着这个博客将node安装 2024最新版Node.js下载安装及环境配…...
如何从混合信号中剔除某一信号——Schmidt正交化的使用(信号互相关)
本文仅用作方法记录,不讲详细原理和底层逻辑。 在面对混合的接收信号的情况下,例如接收信号: Y a 1 X 1 a 2 X 2 a 3 X 3 N Ya_1X_1a_2X_2a_3X_3N Ya1X1a2X2a3X3N 假设信号 X 1 X_1 X1、 X 2 X_2 X2、 X 3 X_3 X3在时域和频域上…...
I2C/IIC学习笔记
I2C/IIC 有些同学I2C和IIC分不清,I2C和IIC实际上是指同一种通信协议。I2C是Inter-Integrated Circuit的缩写,而IIC是它的另一种表述方式,代表的是同一个意思,即“集成电路间总线”。I2C是一种由飞利浦公司(现恩智浦半…...
Servlet学习详解--基本涵盖所有Servlet知识点
目录 一、Servlet二、 Servlet入门2.1. 执行原理2.2. 实现Servlet接口重写其五个方法及其生命周期 三、Request请求对象3.1. 获取请求消息数据3.2. 获取请求头数据3.3. 获取请求体数据3.4. 设置编码3.5. 其他通用功能3.6. 请求转发(Forward)3.7. 转发共享数据 四、Response对象…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
