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

【qt】文件类(QFile)

很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 :
https://www.yuque.com/alive-m4b9n

目录

  • QFile 主要功能
  • QFile 操作步骤
  • QFile 其他常用函数
  • 案例分析及实现
    • 功能一实现:打开文件并显示
    • 功能二实现:另存为

QFile 是 Qt 提供的一个用于文件操作的类,继承自 QIODevice ,用于处理文件的读取、写入、删除等操作。

使用前需要引入头文件

QFile 主要功能

  • 打开文件
  • 读取数据
  • 写入数据
  • 删除文件
  • 检查文件状态
  • 复制和重命名文件

QFile 支持文本和二进制模式,可以用 QTextStreamQDataStream 进行高效的文件操作。

QFile 操作步骤

1️⃣ 创建 QFile 对象

//构造函数
QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)---------示例--------------
QFile file("test.txt");

2️⃣ 调用 open() 以指定模式打开文件

 bool open(FILE *fh, QIODevice::OpenMode mode,  //通过文件路径打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)bool open(int fd, QIODevice::OpenMode mode, 	//通过fd文件描述符打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)------------------示例-----------------
QFile file("test.txt");
file.open(QIODevice::ReadWrite | QIODevice::Text);

打开模式如下,需要多个模式时用 |隔开

模式描述
ReadOnly只读模式
WriteOnly只写模式
ReadWrite读写模式
Append追加模式(不会覆盖已有内容)
Text以文本模式打开(自动转换换行符)
Truncate清空文件内容

3️⃣ 文件操作:读或者写

//读
QByteArray QIODevice::read(qint64 maxSize) //读取最大maxsize的数据
QByteArray QIODevice::readAll()  //读取文件所有数据,返回QByteArray数组
//写
qint64 write(const QByteArray &byteArray) //QByteArray 数据
qint64 write(const char *data, qint64 maxSize)  //char* 指针,数据大小----------示例-----------
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QByteArray content = file.readAll();qDebug() << "文件内容:\n" << content;file.close();
}

4️⃣ 关闭

void QFileDevice::close()

QFile 其他常用函数

类别函数作用示例代码
文件基本操作exists()判断文件是否存在if (file.exists()) qDebug() << "文件存在"
remove()删除文件file.remove();
copy(src, dst)复制文件QFile::copy("test.txt", "backup.txt");
rename(old, new)重命名/移动文件file.rename("new_name.txt");
flush()刷新缓冲区file.flush();
文件信息size()获取文件大小(字节)qDebug() << file.size();
fileName()获取文件名(可能是相对路径)qDebug() << file.fileName();
absoluteFilePath()获取文件的绝对路径qDebug() << QFileInfo(file).absoluteFilePath();
permissions()获取文件权限qDebug() << file.permissions();
setPermissions()修改文件权限file.setPermissions(QFileDevice::ReadOwner)
读写文件isReadable()是否可读if (file.isReadable()) qDebug() << "可读";
isWritable()是否可写if (file.isWritable()) qDebug() << "可写";
文件状态isOpen()判断文件是否已打开if (file.isOpen()) qDebug() << "文件已打开";
isWritable()判断文件是否可写if (file.isWritable()) qDebug() << "文件可写";
handle()获取底层文件句柄int fd = file.handle();

案例分析及实现

需求

  • 打开文件对话框,获取文件路径名,然后通过文件操作将文件内容显示到输入框上
  • 点击另存为按钮可以保存当前文件到其他地方去。

功能一实现:打开文件并显示

思路

1️⃣ 打开文件选择对话框QFileDialog::getOpenFileName

2️⃣ 获取用户选择的文件路径

3️⃣ 使用 QFile 读取文件内容 4️⃣ 将内容显示到 QTextEdit

mainwindow.h

private slots:
void on_openButton_clicked();  // 打开文件
void on_saveAsButton_clicked(); // 另存为private:
Ui::MainWindow *ui;
QString currentFilePath;  // 存储当前文件路径

mainwindow.cpp

//打开文件
void MainWindow::on_openButton_clicked()
{//打开文件对话框,获取文件路径QString filePath = QFileDialog::getOpenFileName(this,"选择文件","","文本文件(*.txt);;所有文件(*.*)");if(filePath.isEmpty()){qDebug()<<"未选择文件";return;}qDebug() << "选择的文件路径:" << filePath;currentFilePath = filePath; //记录当前的文件路径//打开文件QFile file(filePath);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug()<<"文件打开失败"<<file.errorString();//输出错误信息return;}//读取文件内容QTextStream in(&file);QString fileContent = in.readAll();file.close();//显示到QtextEdit上ui->textEdit->setText(fileContent);
}

效果

功能二实现:另存为

mainwindow.cpp

// 另存为
void MainWindow::on_saveAsButton_clicked()
{// 打开文件对话框,获取保存路径QString saveFilePath = QFileDialog::getSaveFileName(this, "另存为", "","文本文件 (*.txt);;所有文件 (*.*)");if (saveFilePath.isEmpty()) {qDebug() << "未选择保存路径";return;}qDebug() << "保存文件路径:" << saveFilePath;// 打开文件QFile file(saveFilePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug() << "文件保存失败:" << file.errorString();return;}// 获取 QTextEdit 中的内容QString content = ui->textEdit->toPlainText();// 写入文件QTextStream out(&file);out << content;file.close();qDebug() << "文件保存成功";
}

效果

相关文章:

【qt】文件类(QFile)

很高兴你能看到这篇文章&#xff0c;同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 &#xff1a; https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现&#xff1a;打开文件并显示功能二实现:另…...

力扣hot100——最长连续序列(哈希unordered_set)

题目链接&#xff1a;最长连续序列 1、错解&#xff1a;数组做哈希表&#xff08;内存超出限制&#xff09; int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…...

3. 实战(一):Spring AI Trae ,助力开发微信小程序

1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番&#xff0c;通过Trae这个火爆全网的工具&#xff0c;来写一个微信小程序。照理说&#xff0c;我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...

MySQL高级语句深度解析与应用实践

一、窗口函数&#xff1a;数据分析的利器 1. 窗口函数基础概念 窗口函数(Window Function)是MySQL 8.0引入的强大特性&#xff0c;它可以在不减少行数的情况下对数据进行聚合计算和分析 SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER…...

SSE服务器主动推送至浏览器客户端,让你不再需要websocket

Server-Sent Events&#xff08;SSE&#xff09;是一种服务器向客户端推送实时更新的技术&#xff0c;基于HTTP协议。客户端通过EventSource API来接收事件流&#xff0c;而服务器则保持一个长连接&#xff0c;持续发送数据。这与传统的请求-响应模式不同&#xff0c;允许服务器…...

UE5新材质系统效果Demo展示

1、玉质材质&#xff0c;透明玻璃材质&#xff0c;不同透射和散射。 2、浅水地面&#xff0c;地面层&#xff0c;水层&#xff0c;地面湿度&#xff0c;水面高度&#xff0c;水下扰动&#xff0c;水下浇洒&#xff0c;水下折射 Substrate-Water Substrate-Water-CodeV2...

wps 怎么显示隐藏文字

wps 怎么显示隐藏文字 》文件》选项》视图》勾选“隐藏文字” wps怎么设置隐藏文字 wps怎么设置隐藏文字...

解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题

解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题 在搭载 M1 Pro 芯片的 macOS 系统上&#xff0c;使用 Vite 进行项目构建&#xff08;build&#xff09;时&#xff0c;您可能会遇到 Node 进程内存溢出的错误。特别是在使用较新版本的 Node.js&am…...

页面重构过程中如何保证良好的跨浏览器一致性?

在页面重构的过程中&#xff0c;为了确保网页能够在不同的浏览器中呈现一致的效果&#xff0c;我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点&#xff1a; 使用标准化的HTML和CSS&#xff1a;始终遵循最新的Web标准编写代码&#xff0c;例如采用…...

CXL UIO Direct P2P学习

前言&#xff1a; 在CXL协议中&#xff0c;UIO&#xff08;Unordered Input/Output&#xff09; 是一种支持设备间直接通信&#xff08;Peer-to-Peer, P2P&#xff09;的机制&#xff0c;旨在绕过主机CPU或内存的干预&#xff0c;降低延迟并提升效率。以下是UIO的核心概念及UI…...

leetcode138.随即链表的复制

思路源于 【力扣hot100】【LeetCode 138】随机链表的复制&#xff5c;哈希表 采用一个哈希表&#xff0c;键值对为<原链表的结点&#xff0c;新链表的结点>&#xff0c;第一次遍历原链表结点时只创建新链表的结点&#xff0c;第二次遍历原链表结点时&#xff0c;通过键拿…...

03_MySQL工具介绍

文章目录 一、Navicat for MySQL1.1、安装 二、SQLyog2.1、安装 多数时候使用SQL语句对数据库进行操作不是很方便&#xff0c;特别是在查询操作时&#xff0c;显示的内容不够直观&#xff0c;此时我们需要借助图形化工具对数据库进行操作。 操作MySQL常用的图形工具如下&#x…...

《网络管理》实践环节01:OpenEuler22.03sp4安装zabbix6.2

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 环境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix网络规划&#xff08;用你们自己的特征网段规划&#xff09; 主机名 IP 功能 备注 zbx6svr 19…...

Qt Creator 中文 “error: C2001: 常量中有换行符“ 问题解决方法

Qt Creator 编译时出现‌中文 error: C2001: 常量中有换行符‌的问题&#xff0c;通常由文件编码与编译器字符集不兼容导致。 一、修改文件编码格式 ‌添加 UTF-8 BOM 签名‌ 在 Qt Creator 中设置&#xff1a;工具 -> 选项 -> 文本编辑器 -> 行为 -> UTF-8 BOM&a…...

Charles 抓包配置保姆教程(PC、IOS、Android)

抓包工具基础配置与使用指南 大家好&#xff0c;我是十一&#xff01;今天给大家分享一篇关于抓包工具的基础配置与使用指南。无论是开发、测试还是安全分析&#xff0c;抓包工具都是不可或缺的利器。本文将详细介绍如何配置和使用抓包工具&#xff0c;并特别推荐一款功能强大…...

洛谷题单1-P1001 A+B Problem-python-流程图重构

题目描述 输入两个整数 a,b&#xff0c;输出它们的和&#xff08;∣a∣,∣b∣≤109&#xff09;。 输入格式 两个以空格分开的整数。 输出格式 一个整数。 输入输出样例 输入 20 30输出 50方式-print class Solution:staticmethoddef oi_input():"""从…...

el-table 动态给每行增加class属性

el-table 动态给每行增加class属性 html代码 row-class-name属性&#xff0c;绑定方法 :row-class-name“tableRowClassName”, <el-table :data"tableData" border :row-class-name"tableRowClassName"> </el-table>js代码 tableRowClassNam…...

Opencv计算机视觉编程攻略-第四节 图直方图统计像素

Opencv计算机视觉编程攻略-第四节 图直方图统计像素 1.计算图像直方图2.基于查找表修改图像3.直方图均衡化4.直方图反向投影进行内容查找5.用均值平移法查找目标6.比较直方图搜索相似图像7.用积分图统计图像 1.计算图像直方图 图像统计直方图的概念 图像统计直方图是一种用于描…...

深度学习处理时间序列(5)

Keras中的循环层 上面的NumPy简单实现对应一个实际的Keras层—SimpleRNN层。不过&#xff0c;二者有一点小区别&#xff1a;SimpleRNN层能够像其他Keras层一样处理序列批量&#xff0c;而不是像NumPy示例中的那样只能处理单个序列。也就是说&#xff0c;它接收形状为(batch_si…...

Mysql 索引性能分析

1.查看CRUD次数 show global status like Com_______&#xff08;7个下划线&#xff09; show global status like Com_______ 2.慢SQL分析 SET GLOBAL slow_query_log ON;-- 设置慢SQL日志记录开启 SET GLOBAL long_query_time 2; -- 设置执行超过 2 秒的查询为慢查询 开…...

win11+ubuntu双系统安装

操作步骤&#xff1a; 官网下载ubuntu 最新镜像文件 准备U盘 准备一个容量不小于 8GB 的 U 盘&#xff0c;用于制作系统安装盘。制作过程会格式化 U 盘&#xff0c;请注意提前备份数据。 制作U盘启动盘 使用rufus工具&#xff0c;或者 balenaEtcher工具&#xff08;官网安…...

linux-5.10.110内核源码分析 - 写磁盘(从VFS系统调用到I/O调度及AHCI写磁盘)

1、VFS写文件到page缓存(vfs_write) 1.1、写裸盘(dd) 使用如下命令写裸盘&#xff1a; dd if/dev/zero of/dev/sda bs4096 count1 seek1 1.2、系统调用(vfs_write) 系统调用栈如下&#xff1a; 对于调用栈的new_sync_write函数&#xff0c;buf为写磁盘的内容的内存地址&…...

arinc818 fpga单色图像传输ip

arinc818协议支持的常用线速率如下图 随着图像分辨率的提高&#xff0c;单lane的速率无法满足特定需求&#xff0c;一种方式是通过多个LANE交叉的去传输图像&#xff0c;另外一种是通过降低图像的带宽&#xff0c;即通过只传单色图像达到对应的效果 程序架构如下图所示&#x…...

业务流程先导及流程图回顾

一、测试流程回顾 &#xfeff; 1. 备测内容回顾 &#xfeff; 备测内容: 本次测试涵盖买家和卖家的多个业务流程&#xff0c;包括下单流程、发货流程、搜索退货退款、支付抢购、换货流程、个人中心优惠券等。 2. 先测业务强调 &#xfeff; 1&#xff09;测试业务流程 …...

HCIP(RSTP+MSTP)

一、STP的重新收敛&#xff1a; 复习STP接口状态 STP初次收敛至少需要50秒的时间。STP的重新收敛情况&#xff1a; 检测到拓扑变化&#xff1a;当网络中的链路故障或新链路加入时&#xff0c;交换机会检测到拓扑变化。 选举新的根桥&#xff1a;如果原来的根桥故障或与根桥直…...

《无线江湖五绝:BLE/WiFi/ZigBee的频谱大战》

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 文章目录 **第一回武林大会&#xff0c;群雄并起****第二回WiFi的“降龙十八掌”****第三回BLE的“峨眉轻功”****第四回ZigBee的“暗器百解”****第五回LoRa的“千里传音”****第六回NB…...

QT第六课------QT界面优化------QSS

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo

写在前面 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1实现 K8s运维文档检索与问答系统 Demo通过 Demo 对 LEDVR 工作流&#xff0c; 语义检索有基本认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货…...

C++ STL常用算法之常用算术生成算法

常用算术生成算法 学习目标: 掌握常用的算术生成算法 注意: 算术生成算法属于小型算法&#xff0c;使用时包含的头文件为 #include <numeric> 算法简介: accumulate // 计算容器元素累计总和 fill // 向容器中添加元素 accumulate 功能描述: 计算区间内容器元素…...

Tof 深度相机原理

深度相机(TOF)的工作原理_tof相机原理-CSDN博客 深度剖析 ToF 技术&#xff1a;原理、优劣、数据纠错与工业应用全解析_tof技术-CSDN博客 飞行时间技术TOF_tof计算公式-CSDN博客 深度相机&#xff08;二&#xff09;——飞行时间&#xff08;TOF&#xff09;_飞行时间技术-C…...