QT项目----电子相册(4)
文章目录
- 前言
- 一、右侧区域PicShow
- 1.创建PicShow
- 2.创建PicButton
- 3.效果图
- qss
- 4.设置动画
- QGraphicsOpacityEffect
- QPropertyAnimation
- 5.双击左侧图片目录 右侧显示图片
- 解决缩放时卡顿的问题
- 二、删除相册
- 实现思路
- 代码实现
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
今天我们实现界面右侧的区域
主要功能就是双击左侧图片目录,右侧可以展示图片。两侧有按钮,可以上下切换图片,同时后期我们还准备做一个轮播图的效果,就是让相册照片自动播放
提示:以下是本篇文章正文内容,下面案例可供参考
一、右侧区域PicShow
1.创建PicShow
我们先创建一个界面类,然后绘制出一个界面
左右两侧是两个按钮,然后中间是一个Label,为了让Label居中,我用四个弹簧挤压居中
我们这里为两侧的按钮单独添加一个类PicButton然后将PicShow中按钮的类提升为我们自己自定义的类
然后将这个ui添加到主界面右侧
//右侧图片区_picshow=new PicShow();ui->picLayout->addWidget(_picshow);
2.创建PicButton
我们单独创建了一个类PicButton
然后我们想让这两个按钮上面有图像,并且有三种状态,一种正常状态,一种是鼠标悬浮在上面,一种是鼠标按下的状态,我们先准备好三种状态的图像,然后重写基类QPushButton的event函数即可
protected:bool event(QEvent *e) override;//通过这个事件e来判断是正常还是悬浮还是点击
bool PicButton::event(QEvent *e)
{switch(e->type()){case QEvent::Enter:setHoverIcon();break;case QEvent::Leave:setNormalIcon();break;case QEvent::MouseButtonPress:setPressedIcon();break;case QEvent::MouseButtonRelease:setHoverIcon();break;default:break;}return QPushButton::event(e);
}
这里的三种状态函数是我们之前写好的
#ifndef PICBUTTON_H
#define PICBUTTON_H#include <QPushButton>
#include<QPixmap>//加载图片样式
#include<QEvent>
class PicButton : public QPushButton
{
public:PicButton(QWidget *parent = nullptr);void SetIcon(const QString& normal,const QString& hover,const QString& pressed);//正常 悬浮 点击 时的按钮图片样式protected:bool event(QEvent *e) override;//通过这个事件e来判断是正常还是悬浮还是点击private:void setNormalIcon();//正常void setHoverIcon();//悬浮void setPressedIcon();//点击QString _normal;QString _hover;QString _pressed;
};#endif // PICBUTTON_H
void PicButton::setNormalIcon()
{QPixmap tmpPixmp;tmpPixmp.load(_normal);this->setIcon(tmpPixmp);}void PicButton::setHoverIcon()
{QPixmap tmpPixmp;tmpPixmp.load(_hover);this->setIcon(tmpPixmp);
}void PicButton::setPressedIcon()
{QPixmap tmpPixmp;tmpPixmp.load(_pressed);this->setIcon(tmpPixmp);
}
当确定状态后,我们就导入图片然后设置上去就行
这里是地址我们设置为了成员变量,并且在SetIcon函数中初始化了地址
void PicButton::SetIcon(const QString &normal, const QString &hover, const QString &pressed)
{_normal=normal;_hover=hover;_pressed=pressed;QPixmap tmpPixmp;tmpPixmp.load(normal);this->resize(tmpPixmp.size());this->setIcon(tmpPixmp);this->setIconSize(tmpPixmp.size());
}
这里我们一开始用this->resize(tmpPixmp.size());是将按钮大小设置为图片大小
后续的setIconSize 是设置此图标在按钮中显示的大小!
3.效果图
这里我们用了qss来将这个图标的边距弄成0 更好看
qss
#nextBtn,#previousBtn {border: 0px;
}
4.设置动画
我们不想这两个图标一直显示出来,我想当鼠标移动到右侧区域的时候,两个图标逐渐显示出来,当鼠标转移至左侧区域的时候,图标逐渐隐藏
QGraphicsOpacityEffect
QGraphicsOpacityEffect 是 Qt 框架中用于实现控件透明度(不透明度)效果的一个类,常用于制作淡入淡出、渐隐渐现等视觉效果。
📌 基本介绍
类名:QGraphicsOpacityEffect
所在模块:QtWidgets
作用:为控件(如 QWidget)添加不透明度效果,控制其显示的透明程度。
🌟 关键方法
方法 说明
setOpacity(double opacity) 设置不透明度,范围为 0.0(完全透明) 到 1.0(完全不透明)
我们这里先创建两个透明度0,然后将按钮设置为该透明度
QGraphicsOpacityEffect* opacity_pre=new QGraphicsOpacityEffect(this);opacity_pre->setOpacity(0);//设置透明度QGraphicsOpacityEffect* opacity_next=new QGraphicsOpacityEffect(this);opacity_next->setOpacity(0);//设置透明度ui->previousBtn->setGraphicsEffect(opacity_pre);//左侧按钮ui->nextBtn->setGraphicsEffect(opacity_next);//右侧按钮
此时按钮的透明度为0 相当于消失的状态
QPropertyAnimation
QPropertyAnimation 是 Qt 动画框架中的一个核心类,用于对对象的属性进行平滑动画过渡。它支持对 QObject 派生类的属性进行线性或非线性变化,比如位置、大小、颜色、不透明度等。
📌 基本介绍
类名:QPropertyAnimation
模块:QtCore(但常用于 QtWidgets)
作用:让某个属性在一段时间内从一个值平滑过渡到另一个值。
🔧 常用构造函数
QPropertyAnimation(QObject *target, const QByteArray &propertyName);
target:动画作用的对象
propertyName:要改变的属性,比如 “geometry”, “pos”, “opacity” 等
🌟 常用方法
方法 说明
setDuration(int msecs) 设置动画持续时间(单位:毫秒)
setStartValue(const QVariant &value) 起始值
setEndValue(const QVariant &value) 结束值
setEasingCurve(QEasingCurve::Type) 设置缓动曲线(控制动画速度变化,比如匀速、加速等)
start() 启动动画
这里我们为两个按钮都单独设置一个动画,动画状态设置为线性平稳
时间为500ms
_animation_show_pre=new QPropertyAnimation(opacity_pre,"opacity",this);_animation_show_pre->setEasingCurve(QEasingCurve::Linear);_animation_show_pre->setDuration(500);//动画时长_animation_show_next=new QPropertyAnimation(opacity_next,"opacity",this);_animation_show_next->setEasingCurve(QEasingCurve::Linear);_animation_show_next->setDuration(500);//动画时长
现在准备工作已经完成,我们重写event函数就行,判断当前鼠标的位置,如果进入右侧区域,我们就让按钮显示,离开的时候我们就让按钮消失就行
bool PicShow::event(QEvent *event)//如果进入这个页面
{switch(event->type()){case QEvent::Enter:ShowPreNextBtns(true);break;case QEvent::Leave:ShowPreNextBtns(false);break;default:break;}return QDialog::event(event);
}
这里的ShowPreNextBtns是我们自定义的一个函数
void PicShow::ShowPreNextBtns(bool b_show)//
{//此时鼠标离开这个页面 并且按键是出现的if(!b_show&&_b_show)//显示状态------>隐藏状态{_animation_show_pre->stop();_animation_show_pre->setStartValue(1);_animation_show_pre->setEndValue(0);_animation_show_pre->start();_animation_show_next->stop();_animation_show_next->setStartValue(1);_animation_show_next->setEndValue(0);_animation_show_next->start();_b_show=false;//按钮已经隐藏return;}//此时鼠标在这个页面 并且按键是隐藏的if(b_show&&!_b_show)//隐藏状态------>显示状态{_animation_show_pre->stop();_animation_show_pre->setStartValue(0);_animation_show_pre->setEndValue(1);_animation_show_pre->start();_animation_show_next->stop();_animation_show_next->setStartValue(0);_animation_show_next->setEndValue(1);_animation_show_next->start();_b_show=true;//按钮已经隐藏return;}
}
思路就是当鼠标进入一个状态后,我们先让之前动画状态停止stop,然后在设置起始值,再开始就行
5.双击左侧图片目录 右侧显示图片
我们先在ProTreeWidget中写一个函数,如果是左键双击一个图片,不是目录,我们就传送一个信号,并且将图片地址传过去
void ProTreeWidget::SlotDoubleClickItem(QTreeWidgetItem *doubleitem, int col)
{if(QGuiApplication::mouseButtons()== Qt::LeftButton){auto * tree_double =dynamic_cast<ProTreeItem*>(doubleitem);if(!tree_double){return;}int itemtype=tree_double->type();if(itemtype==TreeItemPic){emit SigUpdateSelected(tree_double->GetPath());_selected_item=doubleitem;}}
}
然后发送的信号我们在主界面MainWindow中连接
auto * pro_picshow=dynamic_cast<PicShow*>(_picshow);connect(treewidget,&ProTreeWidget::SigUpdateSelected,pro_picshow,&PicShow::SlotSelectItem);
现在我们实现PicShow中的这个槽函数就行
void PicShow::SlotSelectItem(const QString &path)
{_select_path=path;//图片的地址_pix_map.load(path);auto width=this->width();auto height=this->height();_pix_map=_pix_map.scaled(width,height,Qt::KeepAspectRatio);ui->label->setPixmap(_pix_map);
}
因为图片传入进来,我们不确定宽高是否合适,我们就获取展示界面的宽高,然后对图片进行缩放
auto width=this->width();
auto height=this->height();
_pix_map=_pix_map.scaled(width,height,Qt::KeepAspectRatio);
Qt::KeepAspectRatio 参数表示缩放时保持图片比例。
但在对程序进行拉伸,缩小,放大的过程中,可能会使图片比例发生变化
我们写一个重绘事件,并且在MainWindow中调用
void PicShow::ReloadPic()//重绘
{if(_select_path!=""){const auto&width=ui->gridLayout->geometry().width();//获取矩形区域的宽const auto&height=ui->gridLayout->geometry().height();_pix_map.load(_select_path);_pix_map=_pix_map.scaled(width,height,Qt::KeepAspectRatio);ui->label->setPixmap(_pix_map);}
}
ui->gridLayout
gridLayout 是你在 Qt Designer 中放的一个 栅格布局控件(QGridLayout),负责布局其他控件
相当于获取了一个整体可视区域
geometry()
返回一个 QRect 类型,表示这个控件(或布局)在父控件中的几何区域。
包括位置 (x, y) 和尺寸 (width, height)
void MainWindow::resizeEvent(QResizeEvent *event)//重绘事件
{auto *pro_pic_show=dynamic_cast<PicShow*>(_picshow);pro_pic_show->ReloadPic();QMainWindow::resizeEvent(event);
}
解决缩放时卡顿的问题
因为我们在缩放的时候,我们每一次都要对图片进行重绘,导致卡顿,这里我们一开始保存第一张原图,然后重绘的时候,对第一张原图进行重绘就行
这是首次双击左侧的时候,加载进来的第一张原图
void PicShow::SlotSelectItem(const QString &path)//首次图片
{// _select_path=path;// _pix_map.load(path);// auto width=this->width();// auto height=this->height();// _pix_map=_pix_map.scaled(width,height,Qt::KeepAspectRatio);// ui->label->setPixmap(_pix_map);_select_path = path;if(Original_map.load(path)){DisplayUpdate();}
}
调用更新的函数
void PicShow::DisplayUpdate()//更新状态
{auto width=ui->gridLayout->geometry().width();auto height=ui->gridLayout->geometry().height();_pix_map=Original_map.scaled(width,height,Qt::KeepAspectRatio);ui->label->setPixmap(_pix_map);
}
然后在缩放进行重绘的时候
MainWindow中调用重绘函数
void MainWindow::resizeEvent(QResizeEvent *event)//重绘事件
{auto *pro_pic_show=dynamic_cast<PicShow*>(_picshow);pro_pic_show->ReloadPic();return QMainWindow::resizeEvent(event);
}
void PicShow::ReloadPic()//重绘
{// if(_select_path!="")// {// const auto&width=ui->gridLayout->geometry().width();//获取矩形区域的宽// const auto&height=ui->gridLayout->geometry().height();// _pix_map.load(_select_path);// _pix_map=_pix_map.scaled(width,height,Qt::KeepAspectRatio);// ui->label->setPixmap(_pix_map);// }if (!Original_map.isNull()) {DisplayUpdate();}
}
二、删除相册
我们之前完成了导入相册,设置此相册为活动相册,删除相册,我们现在完成删除相册的后部分
在删除相册的时候,如果此时右侧打开的照片属于我们要删除的相册的话,我们还需要清除右侧的图片
实现思路
我们在之前删除相册的函数中判断,先获取右侧图片所显示的照片的根目录,如果与删除的相册根目录相同,我们就发送一个信号通知,要将右侧的图清除掉,同时将保存图片的成员变量和地址都设置为空
代码实现
判断+发送信号
//如果关闭了相册 此时右侧还显示相册中图片 那我们要清除auto *selectitem=dynamic_cast<ProTreeItem*>(_selected_item);//qDebug() << "_selected_item is null?" << (_selected_item == nullptr);//qDebug() << "selectitem is null?" << (selectitem == nullptr);if(selectitem&&now_tree_item==selectitem->GetRoot()){selectitem=nullptr;_selected_item=nullptr;emit SigClearPicShow();//qDebug()<<"fa";}
连接信号
connect(treewidget,&ProTreeWidget::SigClearPicShow,pro_picshow,&PicShow::SlotClearnow);
实现函数
void PicShow::SlotClearnow()
{_select_path="";Original_map=QPixmap();_pix_map=QPixmap();if(ui->label){ui->label->clear();}// qDebug() << "SlotClearnow called, _select_path = " << _select_path;}
总结
接下来我们把后续的轮播图做完就好了
所有代码包括qss的代码我都同步更新在GitHub仓库中
点击此处
相关文章:
QT项目----电子相册(4)
文章目录 前言一、右侧区域PicShow1.创建PicShow2.创建PicButton3.效果图qss 4.设置动画QGraphicsOpacityEffectQPropertyAnimation 5.双击左侧图片目录 右侧显示图片解决缩放时卡顿的问题 二、删除相册实现思路代码实现 总结 前言 提示:这里可以添加本文要记录的大…...
Sentinel源码—9.限流算法的实现对比一
大纲 1.漏桶算法的实现对比 (1)普通思路的漏桶算法实现 (2)节省线程的漏桶算法实现 (3)Sentinel中的漏桶算法实现 (4)Sentinel中的漏桶算法与普通漏桶算法的区别 (5)Sentinel中的漏桶算法存在的问题 2.令牌桶算法的实现对比 (1)普通思路的令牌桶算法实现 (2)节省线程的…...
46. 全排列
题目 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入:…...
UML 顺序图:电子图书馆管理系统的交互之道
目录 一、初识 UML 顺序图 二、电子图书馆管理系统顺序图解析 (一)借阅流程 (二)归还流程 三、顺序图绘画 四、顺序图的优势与价值 五、总结 UML 顺序图是描绘系统组件交互的有力工具。顺序图直观展示消息传递顺序与对象协…...
前端渲染pdf文件解决方案-pdf.js
目录 一、前言 二、简介 1、pdf.js介绍 2、插件版本参数 三、通过viewer.html实现预览(推荐) 1、介绍 2、部署 【1】下载插件包 【2】客户端方式 【3】服务端方式(待验证) 3、使用方法 【1】预览PDF文件 【2】外部搜索…...
接口测试和功能测试详解
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者…...
LeetCode热题100--283.移动零--简单
1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...
CoT 数据集如何让大模型学会「一步一步思考」?
目前,大模型的回答路径基本遵循input-output的方式,在面对复杂任务时表现不佳。反之,人类会遵循一套有条理的思维流程,逐步推理得出正确答案。这种差异促使人们深入思考:如何才能让大模型“智能涌现”,学会…...
量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体)
总章数字免疫系统的解剖学革命 在2024年某国家级数字政务平台的安全审计中,传统前端架构暴露出的信任链断裂问题,导致公民隐私数据以每秒23TB的速度在暗网流通。当我们用PET扫描技术观察现代Web应用的微观结构,发现94.7%的安全威胁源自组件间…...
配置 Nginx 的 HTTPS
证书文件 文件名 作用 来源 example.com.key 服务器的私钥,用于加密和解密数据。 本地生成 -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAqp5c... -----END RSA PRIVATE KEY----- example.com.csr 证书签名请求文件,包含公钥和申请者信息&…...
FPGA开发流程初识
FPGA 的开发流程可知,在 FPGA 开发的过程中会产生很多不同功能的文件,为了方便随时查找到对应文件,所以在开始开发设计之前,我们第一个需要考虑的问题是工程内部各种文件的管理。如 果不进行文件分类,而是将所有文件…...
c++中的enum变量 和 constexpr说明符
author: hjjdebug date: 2025年 04月 23日 星期三 13:40:21 CST description: c中的enum变量 和 constexpr说明符 文章目录 1.Q:enum 类型变量可以有,--操作吗?1.1补充: c/c中enum的另一个细微差别. 2.Q: constexpr 修饰的函数,要求传入的参数必需是常量吗ÿ…...
JVM学习笔记
1、jvm概述 1.1、即时编译 为什么java没有c和c快 多了一层解释,而即时编译就是将热点数放入内存,下次执行的时候不用解释,提高了效率 1.2、常见的jvm jvm不止一个,意不意外?惊不惊喜? 1.3、hotspot的发展…...
AtCoder Beginner Contest 402题解
A - CBC 思路:仔细看这题其实就发现,我们只需要遍历一遍字符串把大写字母输出即可,很标准的签到题 #include<bits/stdc.h> using namespace std; #define int long longsigned main() {string s;cin>>s;for(char c:s){if(c>A…...
Rust 语言使用场景分析
1. 引言:Rust 语言概述 Rust 是一门专注于性能、内存安全和并发性的现代系统编程语言。自 2010 年由 Mozilla Research 的 Graydon Hoare 发起,并于 2015 年正式发布以来,Rust 凭借其独特的设计理念和强大的功能集,在技术领域迅速…...
HTTP 请求头的 key 不区分大小写。
详细说明 HTTP 协议规范 根据 RFC 7230,HTTP 头字段的名称(即 key)在传输时不区分大小写。例如,Content-Type 和 content-type 被视为相同的字段。 实际行为 客户端行为:大多数 HTTP 客户端(如浏览器、cur…...
4.RabbitMQ - 延迟消息
RabbitMQ延迟消息 文章目录 RabbitMQ延迟消息一、延迟消息介绍二、实现2.1 死信交换机2.2 延迟消息插件2.3 取消超时订单 一、延迟消息介绍 延迟消息:生产者发送消息时指定一个时间,消费者不会立刻收到消息,而是在指定时间后才收到消息 用户…...
C++学习:六个月从基础到就业——STL算法(一) 基础与查找算法
C学习:六个月从基础到就业——STL算法(一) 基础与查找算法 本文是我C学习之旅系列的第二十五篇技术文章,也是第二阶段"C进阶特性"的第三篇,主要介绍C STL算法库的基础知识与查找类算法。查看完整系列目录了解…...
springboot+vue 支付宝支付(沙箱方式,测试环境使用)
准备工作: 1 支付宝沙箱环境的公钥,私钥配置,查询等使用,如果是用自定义的方式,需要下生成公钥,私钥的工具,否则不需要 登录 - 支付宝 小程序文档 - 支付宝文档中心 2 本地测试时&…...
安装win11自带linux是报错:WslRegisterDistribution failed with error: 0x800701bcErr
确保系统设置中的“打开win11的子系统”已打钩 管理员身份运行cmd,并输入如下 然后再重启ubantu...
面试经历(一)雪花算法
uid生成方面 1:为什么用雪花算法 分布式ID的唯一性需要保证,同时需要做到 1:单调递增 2:确保安全,一个是要能体现出递增的单号,二一个不能轻易的被恶意爬出订单数量 3:含有时间戳 4&#…...
docker底层原理简述
前言 平时用docker很多,今天深入了解下docker原理层面的实现,包括docker核心概念,文件系统,资源隔离,网络通信等 参考文章: Docker底层原理(图解秒懂史上最全) - 疯狂创客圈 - 博…...
【6D位姿估计】Foundation Pose复现
主要参考 项目仓库README站内其他博文 注意事项 容器化部署不难,主要是部署docker本身会存在一些环境问题,重点关注访问外网的端口需要手动调整至与魔法相同,可以参考: docker部署在启动容器镜像后,需要注意镜像当前…...
TDengine 数据订阅设计
简介 数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样,使用 TDengine 数…...
VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程
Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!࿰…...
高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案
在电商、旅游等行业业务量激增,高并发下单场景中,传统库存扣减方式弊端尽显。超卖问题因缺乏有效并发控制机制频发,多个订单同时访问库存数据,导致同一商品多次售出,订单无法履约引发客户投诉;同时…...
crictl 遇到报错 /run/containerd/containerd.sock: connect: permission denied
报错内容 crictl --runtime-endpoint unix:///run/containerd/containerd.sock logs CONTAINERID FATA[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code Unavailable de…...
CSS外边距合并现象
外边距合并(Margin Collapsing)是指在文档流中,两个或多个相邻元素的外边距(margin)会合并为一个外边距,其大小会取其中最大的外边距值 当两个相邻的兄弟元素之间没有其他内容(如边框、内边距、…...
《深度神经网络之数据增强、模型保存、模型调用、学习率调整》
文章目录 前言一、数据增强1、什么是数据增强?2、数据增强的实现方法(1)几何变换翻转:旋转:平移: (2)颜色变换亮度调整:对比度调整:色彩抖动: (3&…...
【Java学习笔记】random的使用
random使用方法 使用说明:返回的是(0<n<1)这个范围中的任意带正号的double值 代码实例 public class helloworld{public static void main(String[] args){System.out.println(Math.random());} }生成0-100中的任意数代码示例 public class Main {public …...
Redis的string类型使用
第一步:添加缓存 以若依岗位代码为例 一:首先从redis中查询岗位信息,如果查询到了则直接返回。 二:如果redis中没有数据,则直接从数据库中查询。查询后放到redis并返回 package com.ruoyi.system.service.impl;imp…...
AIGC架构与原理
AIGC(AI Generated Content,人工智能生成内容)的架构与原理 AIGC通过整合数据采集、模型训练、推理服务等模块,结合深度学习与生成对抗网络(GAN)等技术,实现从数据到内容的自动化生成。 一、AIG…...
安全复健|windows常见取证工具
写在前面: 此博客仅用于记录个人学习内容,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除) 取证 01系统运行数据 使用工具:Live-F…...
Oracle EBS R12.2 汉化
一、前言 在使用oracle ebs时,使用中文会更好的理解整个ebs流程,以下介绍oracle r12中文补丁的方式 如果你的系统除了支持英语外,还支持其他语言,比如中文,那你在下载补丁的时候除了下载Generic Platform版本外&#…...
【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?
在 Java 中,文件拷贝可以通过多种方式实现,不同方式的性能和适用场景有所差异。 1. Java 文件拷贝方式 传统 IO 方式 使用 FileInputStream 和 FileOutputStream,通过循环读取和写入数据实现文件拷贝。 示例代码: try (InputStream is = new FileInputStream("sou…...
互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析
互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析 面试场景 面试官:马架构,您好!欢迎参加我们的面试。今天我们将围绕消息中间件展开讨论,尤其是RocketMQ、RabbitMQ和Kafka。您有十年的Java研发和架构设计经…...
kali安装切换jdk1.8.0_451java8详细教程
kali安装切换jdk1.8.0_451java8详细教程 下载链接: jdk-8u451-linux-i586.tar.gz 链接: https://pan.baidu.com/s/1lpgI0JMfHpZ__RxsF8UoBw?pwdx3z2 提取码: x3z2 解压jdk 首先将下载好的压缩包放在kali虚拟机中,一般是直接拖到桌面 然后cd到压缩包…...
众趣科技X世界读书日丨数字孪生技术赋能图书馆空间智慧化运营
4月23日,是第30个“世界读书日”,不仅是庆祝阅读的日子,更是思考知识传播未来的契机。 图书馆作为主要传播图书的场所,在科技的发展中,图书馆正面临前所未有的挑战,联合国数据显示,全球近30%的…...
Python内置函数-aiter()
Python内置函数 aiter() 用于获取异步可迭代对象的异步迭代器,是异步编程中的核心工具之一。 1. 基本概念 异步可迭代对象:实现了 __aiter__() 和 __anext__() 方法的对象,支持 async for 循环。 异步迭代器:通过 aiter() 获取的…...
Java 实现单链表翻转(附详细注释)
1. 引言 单链表(Singly Linked List)是一种常见的数据结构,在算法和数据结构的学习中占有重要地位。翻转单链表是一道经典的面试题,本文将介绍几种常见的 Java 实现方法,并详细讲解关键步骤的含义。 2. 单链表定义 …...
基于HPC的气候模拟GPU加速实践全流程解析
基于HPC的气候模拟GPU加速实践全流程解析 关键词:气候模型、GPU加速、CUDA编程、性能优化、分布式训练 摘要: 本文针对全球气候模拟中10^12级网格点实时计算需求,提出基于CUDA的并行计算架构。通过改进WRF模式的分块矩阵乘法算法,…...
【初级】前端开发工程师面试100题(一)
本题库共计包含100题,考察html,css,js,以及react,vue,webpack等基础知识掌握情况。 HTML基础篇 说说你对HTML语义化的理解? 语义化就是用合适的标签表达合适的内容,比如<header>表示页眉,<nav>表示导航。这样不仅代码更清晰,对SEO也友好,屏幕阅读器也能…...
大模型框架技术演进与全栈实践指南
一、大模型框架概述 大模型框架是支撑大规模语言模型(LLM)训练、推理和应用开发的核心技术体系,涵盖分布式训练、高效推理、应用编排等全流程。从AlphaGo到GPT-4,大模型框架的进化推动AI从实验室走向工业化落地。据IDC预测…...
【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
当你在进行深度学习相关操作时,若因缺少本地的 CA 证书而无法下载资源,下面为你介绍几种解决办法: 方法一:更新 CA 证书 在大多数 Linux 发行版中,你可以使用包管理器来更新 CA 证书。例如,在基于 Debian…...
第七章:Workspace Security
Chapter 7: Workspace Security 从变形金刚到安全防护罩:如何为代理设置权限边界? 在上一章多后端配置,我们学会了让代理像变形金刚一样切换不同环境。但就像超级英雄需要遵守法律一样,代理也需要一个“安全防护罩”来限制它的操…...
【论文阅读】Hierarchical Group-Level Emotion Recognition
【论文阅读】Hierarchical Group-Level Emotion Recognition 摘要1.介绍2.相关工作3.方法4.实验5.分析 摘要 本篇博客参考IEEE于2021年收录的论文Hierarchical Group-Level Emotion Recognition,对其主要内容进行总结,以便加深理解和记忆 1.介绍 1&am…...
(2025最新版)CUDA安装及环境配置
CUDA安装 文章目录 CUDA安装检查本地环境下载CUDA安装包CUDA安装检查是否安装成功 学习深度学习的小伙伴在配置环境的时候必不可少的一件事就是安装CUDA,在这个过程中也是容易踩很多坑,所以这里写一篇教程来帮助新入门的小伙伴快速安装CUDA,减…...
ODC 4.3.4 发布:三大核心功能升级,打造更好的数据开发体验
ODC 是OceanBase提供的企业级数据库协同开发平台,提供了团队协作开发的基础框架,和14种工单任务类型。此次升级的 ODC 4.3.4版本,重点优化了30余项功能,主要聚焦快速上手、配置管理和核心功能中的改进,来为用户打造更高…...
JavaFX 第一篇 Hello World
1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库,作为 Java 标准库的一部分(JDK 8 到 10),从 JDK 11 开始,JavaFX 将以独立模块发布,将不再包含在 JDK标准库中,他是 Java 应用程序开发的…...
es的range失效
es的range失效的解决方法 问题描述 当我们es使用keyword类型存储数字时,当我们使用range时我们发现range失效的问题,例如以下的用例: 我们创建一个test1的索引test1: 使用_bulk进行批量导入数据: 进行查询我们发现我…...