当前位置: 首页 > news >正文

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客,接下来是对本程序的功能完善,我想着是这样设计的,打开一个目录以后,鼠标选中一个项可以是目录,也可以是文件,右键可以出现一个菜单选择操作,比如删除,重命名,新建文件等。

新添头文件

#include<QAction>
#include<QMenu>
#include<QString>
#include<QModelIndex>
#include<QFileInfo>
#include<QMessageBox>
#include<QInputDialog>

成员变量

    QMenu *menu;//右键菜单QAction *deldir;//删除操作QAction *newdir;//新建文件夹QAction *newfile;//新建文件QAction *renamefile;//重命名文件QString filepath;//当前操作所在的目录地址QModelIndex selectindex;//当前选中的项bool hasopen=false;//只有打开过才可以触发菜单

槽函数

void onmenu(const QPoint &pos);//右键菜单栏void deleteSelect();//删除目录void renameselect();//重命名文件void createfileincurrentdir();//在当前目录下新建文件void createFolderincurrentdir();//在当前目录下新建目录

 主程序

在主程序里面首先就是创建菜单栏,创建爱了许多action,但是我这菜单中的选中分为目录和文件,在不同的地方选中可使用的action有些不同,执行的逻辑就是首先判断有没有打开过目录,没有打开过就挂掉,打开过判断当前索引是否有效,如果有效选中的是目录还是文件,如果无效如果是空文件夹下就设置相应的action。具体程序如下

void MainWindow::onmenu(const QPoint &pos)
{//如果没有打开过目录不触发if(hasopen==false){return;}//QAction初始化deldir=new QAction("删除",this);newdir=new QAction("新建文件夹",this);//新建文件夹newfile=new QAction("新建文件",this);//新建文件renamefile=new QAction("重命名文件",this);//重命名文件//获取当前选中项索引selectindex=ui->treeView->indexAt(pos);//if(!selectindex.isValid()){return;}menu->clear();filepath=model->filePath(selectindex);// 判断是否有效索引if (selectindex.isValid()) {filepath = model->filePath(selectindex);// 根据文件类型添加菜单项if (model->isDir(selectindex)) {menu->addAction(deldir);menu->addAction(newdir);menu->addAction(newfile);} else {menu->addAction(deldir);menu->addAction(renamefile);}}// 无效索引时(空文件夹空白处)else {// 获取当前视图的根目录路径filepath = model->rootPath();if(filepath.isEmpty()){filepath=QDir::homePath();}// 添加新建操作menu->addAction(newdir);menu->addAction(newfile);}connect(deldir,&QAction::triggered,this,&MainWindow::deleteSelect);connect(newdir,&QAction::triggered,this,&MainWindow::createFolderincurrentdir);connect(newfile,&QAction::triggered,this,&MainWindow::createfileincurrentdir);connect(renamefile,&QAction::triggered,this,&MainWindow::renameselect);
//?menu->exec(ui->treeView->viewport()->mapToGlobal(pos));
}

然后就是槽函数的具体实现了

void MainWindow::deleteSelect()
{QString path=model->filePath(selectindex);QFileInfo fileinfo(path);QString title=fileinfo.isDir()?"删除目录":"删除文件";QString question=fileinfo.isDir()?"确定要删除目录和该目录下所有文件?":"确定要删除该文件?";QMessageBox::StandardButton reply=QMessageBox::question(this,title,question,QMessageBox::Yes|QMessageBox::No);if(reply==QMessageBox::Yes){bool success=fileinfo.isDir()?QDir(path).removeRecursively():QFile::remove(path);if(!success){QMessageBox::critical(this,"错误","删除失败,请检查权限或以管理员身份运行");}}
}//重命名文件
void MainWindow::renameselect()
{if(model->isDir(selectindex)){return;}//弹窗输入新文件名bool ok;QString newfilename=QInputDialog::getText(this,"重命名文件","请输入新文件名:",QLineEdit::Normal,model->fileName(selectindex),&ok);//如果修改了并且新的文件名不为空if(ok&&!newfilename.isEmpty()){QDir dir=model->fileInfo(selectindex).dir();QString oldpath=model->filePath(selectindex);QString newpath=dir.absoluteFilePath(newfilename);if(!QFile::rename(oldpath,newpath)){qDebug()<<"重命名失败!";}}}//在当前目录下创建文件
void MainWindow::createfileincurrentdir()
{bool ok;QString filename=QInputDialog::getText(this,"新建文件","请输入新文件文件名:",QLineEdit::Normal,"",&ok);if(!ok||filename.isEmpty()){return;}//新建文件QFile file(QDir(filepath).filePath(filename));if(!file.open(QIODevice::WriteOnly)){QMessageBox::critical(this,"错误","创建文件失败,请检查文件名或权限");return;}file.close();
}//在当前目录下创建文件夹
void MainWindow::createFolderincurrentdir()
{bool ok;QString dirname=QInputDialog::getText(this,"新建目录","请输入新建的目录名:",QLineEdit::Normal,"",&ok);if(!ok||dirname.isEmpty()){return;}QDir dir(filepath);if(!dir.mkdir(dirname)){QMessageBox::critical(this,"错误","目录创建失败");return;}
}

源码已上传,大家先看看代码吧,代码都有注释,后面我慢慢完善

相关文章:

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客&#xff0c;接下来是对本程序的功能完善&#xff0c;我想着是这样设计的&#xff0c;打开一个目录以后&#xff0c;鼠标选中一个项可以是目录&#xff0c;也可以是文件&#xff0c;右键可以出现一个菜单选择操作&#xff0c;比如…...

SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。

/// <summary> /// SqlHelper 实现类&#xff0c;支持多数据库&#xff0c;提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。 /// </summary> public class SqlHelper : IDbHelper {private readonly IDbConnectionFactory _connectionFactory;private…...

DevExpressWinForms-RichEditControl-基础应用

RichEditControl-基础应用 在企业级WinForms应用开发中&#xff0c;富文本编辑与文档处理是常见需求。DevExpress WinForms的RichEditControl作为一款功能强大的富文本编辑控件&#xff0c;提供了媲美Microsoft Word的文档处理能力&#xff0c;支持复杂格式编辑、打印导出、界…...

Elasticsearch 索引副本数

作者&#xff1a;来自 Elastic Kofi Bartlett 解释如何配置 number_of_replicas、它的影响以及最佳实践。 更多阅读&#xff1a;Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica 想获得 Elastic 认证&#xff1f;查看下一期 Elasticsearc…...

RabbitMQ 扇形交换器工作原理详解

目录 一、扇形交换器简介二、扇形交换器工作原理2.1 消息广播机制2.2 路由键的忽略三、代码示例3.1 生产者代码3.2 消费者代码四、实际应用场景4.1 日志收集系统4.2 实时通知系统4.3 事件驱动架构五、总结在 RabbitMQ 的众多交换器类型中,扇形交换器(Fanout Exchange)是一种…...

IDEA中springboot项目中连接docker

具体内容如下&#xff1a; 1、在Linux中安装docker 使用安装命令&#xff1a; apt-get install docker.io 还有一个是更新软件并安装docker&#xff1a; sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io 运行docker systemctl start …...

arxiv等开源外文书数据的获取方式

一、一些基本说明 开放API接口文档&#xff1a;https://info.arxiv.org/help/api/user-manual.html#2-api-quickstart研究领域分类说明文档&#xff1a;https://arxiv.org/category_taxonomy 二、基于url接口方式检索并获取数据 本质是get方式&#xff0c;在url中传检索参数…...

ChatGPT再升级!

近日&#xff0c;OpenAI 正式发布 GPT-4.1 和轻量级版本 GPT-4.1mini&#xff0c;并已全面上线 ChatGPT 平台&#xff0c;迅速引发全球 AI 圈热议&#xff0c;标志着 ChatGPT 在智能化和效率上再登新高峰。 GPT-4.1 是为编程与任务处理优化的高性能模型。相较前作 GPT-4o&#…...

23、电网数据管理与智能分析 - 负载预测模拟 - /能源管理组件/grid-data-smart-analysis

76个工业组件库示例汇总 电网数据管理与智能分析组件 1. 组件概述 本组件旨在模拟一个城市配电网的运行状态&#xff0c;重点关注数据管理、可视化以及基于模拟数据的智能分析&#xff0c;特别是负载预测功能。用户可以通过界面交互式地探索电网拓扑、查看节点状态、控制时间…...

#跟着若城学鸿蒙# web篇-获取定位

前言 在业务中&#xff0c;某些网页上需要获取用户的地理位置&#xff0c;然后按照用户搜索的兴趣点与用户的距离远近进行排序&#xff0c;这就需要h5能够获取到用户的位置。 由于 web 组件基于Chromium M114 版本开发&#xff0c;前端就可以使用navigator.geolocation.getC…...

前端批量下载文件打包为zip

多文件需要一次性下载为zip文件 这是近期遇到的一个需求&#xff0c;本身是多文件上传的&#xff0c;下载时单个下载太慢又繁杂&#xff0c;用户希望能一次性批量下载&#xff0c;就选择了jszip import axios from "axios" import JSZip from "jszip" im…...

Vue百日学习计划Day9-15天详细计划-Gemini版

重要提示&#xff1a; 番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。灵活性&#xff1a; JavaScript 的概念较多&#xff0c;尤其是 this、原型链、闭包和异步编程&#xff0c;可能需要更多…...

MySQL8.x新特性:与mysql5.x的版本区别

MySQL8.x新特性 1.与mysql5.x的区别&#xff1a;MySQL8.x新特性&#xff1a;与mysql5.x的版本区别-CSDN博客 2.窗口函数&#xff08;Window Functions&#xff09;&#xff1a;MySQL8.x新特性&#xff1a;窗口函数&#xff08;Window Functions&#xff09;-CSDN博客 引言 …...

RabbitMQ 消息模式实战:从简单队列到复杂路由(三)

精准投递&#xff1a;路由模式 路由模式详解 路由模式是 RabbitMQ 中一种功能强大且灵活的消息传递模式&#xff0c;它在发布订阅模式的基础上&#xff0c;引入了路由键&#xff08;Routing Key&#xff09;的概念&#xff0c;实现了消息的精准路由和分发 。在路由模式中&…...

STM32 定时器主从模式配置解析

STM32 定时器主从模式配置解析 下面这两行代码是配置STM32定时器主从模式的关键设置 代码功能解析 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); // 选择从模式输出的触发源 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 选择从模式1. TIM_SelectInputTrigger(T…...

Leetcode76覆盖最小子串

覆盖最小子串 代码来自b站左程云 class Solution {public String minWindow(String str, String tar) {char[] s str.toCharArray();char[] t tar.toCharArray();int[] cnt new int[256];for (char cha : t) { cnt[cha]--;}int len Integer.MAX_VALUE;int debt t.length…...

Perl语言深度考查:从文本处理到正则表达式的全面掌握

阅读原文 前言&#xff1a;为什么Perl依然值得学习&#xff1f; "这个脚本用Perl写只需要5分钟&#xff01;"——在当今Python大行其道的时代&#xff0c;你依然能在不少企业的运维部门听到这样的对话。Perl作为一门有着30多年历史的语言&#xff0c;凭借其强大的文…...

idea中Lombok失效的解决方案

Lombok 是一个 Java 库&#xff0c;旨在通过注解简化 Java 代码的编写&#xff0c;减少样板代码&#xff0c;提高开发效率。它通过自动生成常见的代码&#xff08;如 getter、setter、构造函数等&#xff09;来减少开发者的手动编码工作。 一般Lombok失效有四步排查方案&#…...

【LeetCode 热题 100】动态规划 系列

&#x1f4c1; 70. 爬楼梯 状态标识&#xff1a;爬到第i层楼梯时&#xff0c;有多少种方法。 状态转移方程&#xff1a;dp[i] dp[i-1] dp[i-2]&#xff0c;表示从走一步和走两步的方式。 初始化&#xff1a;dp[1] 1 , dp[2] 2。 返回值&#xff1a;dp[n]&#xff0c;即走到…...

刷leetcodehot100返航版--双指针5/16

for (int i 0, j 0; i < n; i ) { while (j < i && check(i, j)) j ; // 具体问题的逻辑 } 常见问题分类&#xff1a; (1) 对于一个序列&#xff0c;用两个指针维护一段区间 (2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并排序中…...

DAY24元组和OS模块

元组 元组的特点&#xff1a; 有序&#xff0c;可以重复&#xff0c;这一点和列表一样元组中的元素不能修改&#xff0c;这一点非常重要&#xff0c;深度学习场景中很多参数、形状定义好了确保后续不能被修改。 很多流行的 ML/DL 库&#xff08;如 TensorFlow, PyTorch, Num…...

CSS:三大特性

文章目录 一、层叠性二、继承性三、优先级 一、层叠性 二、继承性 可以在MDN网站上查看属性是否可以被继承 例如color 三、优先级...

Cross-Site Scripting(XSS)

1. XSS介绍 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff09;简称XSS&#xff0c;人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩…...

掌握HTML文件上传:从基础到高级技巧

HTML中input标签的上传文件功能详解 一、基础概念 1. 文件上传的基本原理 在Web开发中&#xff0c;文件上传是指将本地计算机中的文件&#xff08;如图片、文档、视频等&#xff09;传输到服务器的过程。HTML中的<input type"file">标签是实现这一功能的基础…...

WebRTC中的几个Channel

一、我指的是谁&#xff1f; 以视频为例&#xff0c;常见的有&#xff1a;MediaChannel、VideoMediaChannel、WebRtcVideoChannel、BaseChannel、VideoChannel&#xff0c;那么&#xff0c;为什么要这么多Channel&#xff0c;只写一个叫做SuperChannel行不行&#xff08;很多程…...

【设计模式】- 行为型模式1

模板方法模式 定义了一个操作中的算法骨架&#xff0c;将算法的一些步骤推迟到子类&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些步骤 【主要角色】&#xff1a; 抽象类&#xff1a;给出一个算法的轮廓和骨架&#xff08;包括一个模板方法 和 若干基…...

容器化-k8s-使用和部署

一、K8s 使用 1、基本概念 集群: 由 master 节点和多个 slaver 节点组成,是 K8s 的运行基础。节点: 可以是物理机或虚拟机,是 K8s 集群的工作单元,运行容器化应用。Pod: K8s 中最小的部署单元,一个 Pod 可以包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。…...

黑马k8s(九)

1.Pod-生命周期概述 2.Pod生命周期-创建和终止 3.Pod生命周期-初始化容器...

Android trace中CPU的RenderThread与GPU

Android trace中CPU的RenderThread与GPU RenderThread是系统的GPU绘制线程&#xff0c;GPU渲染就是通常所谓的硬件加速&#xff0c;如果应用关闭硬件加速&#xff0c;就没有了RenderThread&#xff0c;只有UI Thread&#xff0c;即Android主线程。 Android GPU渲染SurfaceFlin…...

测试工程师如何学会Kubernetes(k8s)容器知识

Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程…...

接触感知 钳位电路分析

以下是NG板接触感知电路的原理图。两极分别为P3和P4S&#xff0c;电压值P4S < P3。 电路结构分两部分&#xff0c;第一部分对输入电压进行分压钳位。后级电路使用LM113比较器芯片进行电压比较&#xff0c;输出ST接触感知信号。 钳位电路输出特性分析 输出电压变化趋势&a…...

码蹄集——圆包含

MT1181 圆包含 输入2个圆的圆心的坐标值&#xff08;x&#xff0c;y&#xff09;和半径&#xff0c;判断断一个圆是否完全包含另一个圆&#xff0c;输出YES或者NO。另&#xff1a;内切不算做完全包含。 格式 输入格式&#xff1a;输入整型&#xff0c;空格分隔。 每行输入一组…...

ConcurrentSkipListMap的深入学习

目录 1、介绍 1.1、线程安全 1.2、有序性 1.3、跳表数据结构 1.4、API 提供的功能 1.5、高效性 1.6、应用场景 2、数据结构 2.1、跳表&#xff08;Skip List&#xff09; 2.2、节点类型&#xff1a; 1.Node 2.Index 3.HeadIndex 2.3、特点 3、选择层级 3.1、随…...

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例 在工业自动化领域&#xff0c;Profibus DP和Modbus TCP是两种常见的通信协议。Profibus DP广泛应用于过程自动化、工厂自动化等场景&#xff0c;而Modbus TCP则常见于楼宇自动化、能源管理等领域。由于设备和系统之间往往存…...

第一次做逆向

题目来源&#xff1a;ctf.show 1、下载附件&#xff0c;发现一个exe和一个txt文件 看看病毒加没加壳&#xff0c;发现没加那就直接放IDA 放到IDA找到main主函数&#xff0c;按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑&#xff0c;将flag.txt文件的内容进行加…...

【项目】自主实现HTTP服务器:从Socket到CGI全流程解析

00 引言 ​ 在构建高效、可扩展的网络应用时&#xff0c;理解HTTP服务器的底层原理是一项必不可少的技能。现代浏览器与移动应用大量依赖HTTP协议完成前后端通信&#xff0c;而这一过程的背后&#xff0c;是由网络套接字驱动的请求解析、响应构建、数据传输等一系列机制所支撑…...

AI最新资讯,GPT4.1加入网页端、Claude 3.7 Sonnet携“极限推理”发布在即

目录 一、GPT4.1加入网页端二、Claude 3.7 Sonnet携“极限推理”发布在即三、这项功能的关键特点1、双模式操作2、可视化思考过程3、可控的思考预算4、性能提升 四、Claude制作SVG图像1、Prompt提示词模板2、demo&#xff1a;技术路线图**Prompt提示词&#xff1a;**3、甘特图4…...

Android 中使用通知(Kotlin 版)

1. 前置条件 Android Studio&#xff1a;确保使用最新版本&#xff08;2023.3.1&#xff09;目标 API&#xff1a;最低 API 21&#xff0c;兼容 Android 8.0&#xff08;渠道&#xff09;和 13&#xff08;权限&#xff09;依赖库&#xff1a;使用 WorkManager 和 Notificatio…...

在 Kotlin 中,什么是解构,如何使用?

在 Kotlin 中&#xff0c;解构是一种语法糖&#xff0c;允许将一个对象分解为多个独立的变量。 这种特性可以让代码更简洁、易读&#xff0c;尤其适用于处理数据类、集合&#xff08;如 Pair、Map&#xff09;或其他结构化数据。 1 解构的核心概念 解构通过定义 componentN()…...

apisix透传客户端真实IP(real-ip插件)

文章目录 apisix透传客户端真实IP需求和背景apisix real-ip插件为什么需要 trusted_addresses&#xff1f;安全架构的最佳实践 示例场景apisix界面配置 apisix透传客户端真实IP 需求和背景 当 APISIX 前端有其他反向代理&#xff08;如 Nginx、HAProxy、云厂商的 LB&#xff…...

初学者如何用 Python 写第一个爬虫?

初学者如何用 Python 写第一个爬虫&#xff1f; 一、爬虫的基本概念 &#xff08;一&#xff09;爬虫的定义 爬虫&#xff0c;英文名为 Web Crawler&#xff0c;也被叫做网络蜘蛛、网络机器人。想象一下&#xff0c;有一个勤劳的小蜘蛛&#xff0c;在互联网这个巨大的蜘蛛网中…...

基于MNIST数据集的手写数字识别(CNN)

目录 一&#xff0c;模型训练 1.1 数据集介绍 1.2 CNN模型层结构 1.3 定义CNN模型 1.4 神经网络的前向传播过程 1.5 数据预处理 1.6 加载数据 1.7 初始化 1.8 模型训练过程 1.9 保存模型 二&#xff0c;模型测试 2.1 定义与训练时相同的CNN模型架构 2.2 图像的预处…...

QT6 源(103)篇三:阅读与注释 QPlainTextEdit,给出源代码

&#xff08;10&#xff09;关于文本处理的内容很多&#xff0c;来不及全面阅读、思考与整理。先给出类的继承图&#xff1a; &#xff08;11&#xff09;本源代码来自于头文件 qplaintextedit . h &#xff1a; #ifndef QPLAINTEXTEDIT_H #define QPLAINTEXTEDIT_H#include &…...

yocto5.2开发任务手册-7 升级配方

此文为机器辅助翻译&#xff0c;仅供个人学习使用&#xff0c;如有翻译不当之处欢迎指正 7 升级配方 随着时间的推移&#xff0c;上游开发者会为图层配方构建的软件发布新版本。建议使配方保持与上游版本发布同步更新。 虽然有多种升级配方的方法&#xff0c;但您可能需要先…...

LangPDF: Empowering Your PDFs with Intelligent Language Processing

LangPDF: Empowering Your PDFs with Intelligent Language Processing Unlock Global Communication: AI-Powered PDF Translation and Beyond In an interconnected world, seamless multilingual document management is not just an advantage—it’s a necessity. LangP…...

DDS(数据分发服务) 和 P2P(点对点网络) 的详细对比

1. 核心特性对比 维度 DDS P2P 实时性 微秒级延迟&#xff0c;支持硬实时&#xff08;如自动驾驶&#xff09; 毫秒至秒级&#xff0c;依赖网络环境&#xff08;如文件传输&#xff09; 架构 去中心化发布/订阅模型&#xff0c;节点自主发现 完全去中心化&#xff0c;节…...

TC8:SOMEIP_ETS_029-030

SOMEIP_ETS_029: echoUINT8Array16Bitlength 目的 检查当method echoUINT8Array16BitLength的参数中长度字段为16bit时,SOME/IP协议层是否能对参数进行序列化和反序列化。 对于可变长度的数组而言,必须用长度字段表示数组长度。否则接收方无法判断有效数据。 SOMEIP_ETS_02…...

Elasticsearch索引全生命周期管理指南之一

#作者&#xff1a;猎人 文章目录 一、索引常规操作二、索引mapping和别名管理 一、索引常规操作 索引数据特点&#xff1a; 索引中的数据随着时间&#xff0c;持续不断增长 按照时间序列划分索引的好处&挑战&#xff1a; 按照时间进行划分索引&#xff0c;会使得管理更加…...

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…...

ARM服务器解决方案

ARM服务器解决方案已成为异构计算领域的重要技术路径&#xff0c;其核心优势与多元化场景适配性正加速产业渗透。以下为关键要点分析&#xff1a; 一、核心优势与架构设计 能效比优化‌ ARM架构基于RISC指令集&#xff0c;单节点功耗可控制在15W以下&#xff0c;较x86架构能效…...