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

Qt之文件系统操作和读写

Qt creator 6.80   MinGw 64bit

文本文件是指以纯文本格式存储的文件,如cpp和hpp文件。XML文件和JSON文件也是文本文件,只是使用了特定的标记符号定义文本的含义,读取这种文本文件需要先对内容解析再显示。

 qt提供了两种读写文本文件的方法。

一种是QFile,另一种是QTextStream。

下面介绍这两种方法的使用。

软件界面设计如下

软件运行界面

程序结构如下

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.hpp和mainwindow.cpp代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_actOpenFile_triggered();void on_actQFileSave_triggered();void on_actQSaveFileSave_triggered();void on_actOpenStream_triggered();void on_actQTextStreamSave_triggered();private:QString getFileName(bool save=false);
private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
/***********************************************mainwindow.cpp****************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDir>
#include<QFileDialog>
#include<QSaveFile>
#include<QException>
#include<QTextDocument>
#include<QTextBlock>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setCentralWidget(ui->tabWidget);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_actOpenFile_triggered()
{QString aFileName;aFileName=getFileName(false);QFile aFile(aFileName);if(!aFile.exists())  return ;if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))return ;QByteArray allLines=aFile.readAll();QString text(allLines);ui->textEditDevice->setPlainText(text);aFile.close();ui->tabWidget->setCurrentIndex(0);
}QString MainWindow::getFileName(bool save)
{QString curPath=QDir::currentPath();QString dlgTitle="打开一个文件";QString filter="程序文件(*.cpp *.h);;文本文件(*.txt);;所有文件(*.*)";QString aFileName;if(save)aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);elseaFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);if(aFileName.isEmpty()) return aFileName;QFileInfo fileInfo(aFileName);QDir::setCurrent(fileInfo.absoluteFilePath());return aFileName;
}
void MainWindow::on_actQFileSave_triggered()
{QString aFileName=getFileName(true);if(aFileName.isEmpty()) return;QFile aFile(aFileName);if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text)){return ;}QString str=ui->textEditDevice->toPlainText();QByteArray strBytes=str.toUtf8();aFile.write(strBytes,strBytes.length());aFile.close();ui->tabWidget->setCurrentWidget(0);
}
void MainWindow::on_actQSaveFileSave_triggered()
{QString aFileName=getFileName(true);QSaveFile aFile(aFileName);if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text)){return ;}aFile.setDirectWriteFallback(false);//使用临时文件try{QString str=ui->textEditDevice->toPlainText();QByteArray strBytes=str.toUtf8();aFile.write(strBytes,strBytes.length());aFile.commit();ui->tabWidget->setCurrentIndex(0);}catch (QException &e){qDebug("保存文件过程发生错误");aFile.cancelWriting();}
}
void MainWindow::on_actOpenStream_triggered()
{QString aFileName=getFileName(false);QFile aFile(aFileName);if(!aFile.exists()) return ;if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))return ;QTextStream aStream(&aFile);aStream.setAutoDetectUnicode(true);QString str=aStream.readAll();ui->textEditStream->appendPlainText(str);aFile.close();
}
void MainWindow::on_actQTextStreamSave_triggered()
{QString aFileName=getFileName(true);QSaveFile aFile(aFileName);if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))return ;aFile.setDirectWriteFallback(false);try{QTextStream aStream(&aFile);aStream.setAutoDetectUnicode(true);   //写入临时文件QTextDocument *doc=ui->textEditStream->document();int cnt=ui->textEditStream->blockCount();for(int i=0;i<cnt;i++){QTextBlock textLine=doc->findBlockByLineNumber(i);QString str=textLine.text();aStream<<str<<"\n";}aFile.commit();}catch(QException &e){qDebug("保存文件过程发生错误");aFile.cancelWriting();}
}

相关文章:

Qt之文件系统操作和读写

Qt creator 6.80 MinGw 64bit 文本文件是指以纯文本格式存储的文件&#xff0c;如cpp和hpp文件。XML文件和JSON文件也是文本文件&#xff0c;只是使用了特定的标记符号定义文本的含义&#xff0c;读取这种文本文件需要先对内容解析再显示。 qt提供了两种读写文本文件的方法。…...

【物联网】keil仿真环境设置 keilV5可以适用ARM7

文章目录 一、ARM指令模拟器环境搭建1. keil软件2. Legacy Support 二、Keil仿真环境设置1. 创建一个项目2. 编译器介绍(1)arm-none-eabi-gcc(2)arm-none-linux-gnueabi-gcc(3)arm-eabi-gcc(4)grmcc(5)aarch64-linux-gnu-gcc 3. 安装编译器(1)设置调试 一、ARM指令模拟器环境搭…...

VIVADO ILA IP进阶使用之任意设置ILA的采样频率

VIVADO ILA IP进阶使用之任意设置ILA的采样频率 VIVADO ILA IP和VIO IP结合使用任意设置ILA的采样频率 目录 前言 一、VIO IP的配置 二、ILA IP的配置 三、测试代码 四、测试结果 总结 前言 VIVADO中编写完程序上板测试时经常会用到viavdo自带的ILA逻辑分析仪IP核&#x…...

网络编程-网络原理HTTP初识

文章目录 TCP/IP五层协议栈关于自定义协议常见自定义协议引入行文本格式XML格式JSONprotobuf HTTP原理非自定义的应用层协议HTTP的发展HTTP的传输模式HTTP协议中的代理模式和抓包工具 TCP/IP五层协议栈 具体的内容, 我们之前的网络初始里面有, 其实就是先前的计算机的发明者把…...

基于若依框架的动态分页逻辑的实现分析

如果让我们自己写分页查询的逻辑&#xff0c;应该怎么写呢&#xff1f; 在前端要完成分页的逻辑实际要做的工作还是挺多的。 分页查询应该支持查询参数的输入&#xff0c;对于一个有众多属性的列表&#xff0c;可能有很多查询参数&#xff0c;对于不同的参数类型&#xff0c;…...

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务&#xff0c;涉及训练模型将图像分类为预定义类别。本文中&#xff0c;我们将探讨如何使用 PyTorch 构建一个简单的自定…...

【数据结构篇】顺序表 超详细

目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口&#xff1a; 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…...

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台&#xff0c;提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外&#xff0c;直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权&#xff0c;并且适用于那…...

linux平台RTMP|RTSP播放器如何回调SEI数据?

我们在对接Linux平台RTMP|RTSP播放的时候&#xff0c;有遇到这样的技术需求&#xff0c;合作企业在做无人机视觉分析场景的时候&#xff0c;除了需要低延迟的拿到解码后的RGB|YUV数据&#xff0c;然后投递给他们自己的视觉算法处理模块外&#xff0c;还需要播放器支持SEI的回调…...

Vue uni-app免手动import

unplugin-auto-import 是一个流行的 JavaScript/TypeScript 插件&#xff0c;可以自动导入常用的库、API 或自定义函数&#xff0c;减少手动书写 import 语句的繁琐操作。它常用于 Vue、React 等框架&#xff0c;帮助开发者提高效率和减少样板代码。 核心功能&#xff1a; 自…...

7. 计算机视觉

计算机视觉&#xff08;Computer Vision&#xff0c;简称 CV&#xff09;是人工智能&#xff08;AI&#xff09;领域中的一个重要分支&#xff0c;旨在使计算机能够像人类一样“看”并理解数字图像或视频。它结合了计算机科学、数学、图像处理、模式识别、机器学习等多个学科&a…...

在服务器进行docker部署频繁提示permission denied

当你频繁遇到permission denied&#xff0c;证明当前用户的权限不够 可以参考如下操作&#xff1a; 1.创建用户组docker sudo groupadd docker把当前用户添加到docker用户组中 sudo usermod -aG docker $USER优点&#xff1a; 可以在不使用sudo的情况下运行docker命令...

c/c++ static

定义 修饰普通变量&#xff0c;修改变量的存储区域和生命周期&#xff0c;使变量存储在静态区&#xff0c;在 main 函数运行前就分配了空间&#xff0c;如果有初始值就用初始值初始化它&#xff0c;如果没有初始值系统用默认值初始化它。修饰普通函数&#xff0c;表明函数的作…...

C#中System.Text.Json:从入门到精通的实用指南

一、引言 在当今数字化时代&#xff0c;数据的高效交换与处理成为软件开发的核心环节。JSON&#xff08;JavaScript Object Notation&#xff09;凭借其简洁、轻量且易于读写的特性&#xff0c;已然成为数据交换领域的中流砥柱。无论是前后端数据交互&#xff0c;还是配置文件…...

内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)

内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机&#xff0c;或者系统卡顿的情况&#xff1f;这些问题看起来很复杂&#xff0c;实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一&#xff0c;任何小东西问题都可能导致系统死机&#xff0c;严重时甚…...

[操作系统] 进程状态详解

在操作系统中&#xff0c;进程是程序执行的基本单位&#xff0c;操作系统负责管理进程的生命周期。为了高效地管理进程&#xff0c;操作系统通过定义不同的进程状态来表示进程在不同时间点的行为。本文将详细介绍常见的进程状态及其相互之间的转换过程。 进程状态概述 在kerne…...

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…...

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…...

Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)

Profiles Profile 是一个以名称标识的集合&#xff0c;用于管理 密码 和 资源限制。 每个用户都对应一个profiles&#xff0c;可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...

C语言:位段

位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char &#xff08;属于整形家族&#xff09;类型 2. 位段的空间上是按照需要以4个字节&#xff08; 类型 int &#xff09;或者1个字节&#xff08; char &#xff09;的方式来开辟的。 3. 位段涉及…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...