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();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习记录1

[SUCTF 2019]EasyWeb 直接给了源代码&#xff0c;分析一下 <?php function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir "upload/tmp_".md5($_SERVER[REMOTE_ADDR]);if(!file_exists($userdir)){mkdir($userdir);}if…

C语言进阶习题【1】指针和数组(3)——一维指针指向字符数组首元素地址

3.3 一维指针指向数组首元素地址&#xff0c;sizeof和strlen #include<string.h> int main() {char* p "abcdef"; //指针p指向字符串首地址printf("%d\n", sizeof(p));//p是一位指针&#xff0c;求指针的大小&#xff1a;4字节/32位机器 或 8字节…

Linux:磁盘分区

目录 文件 内容 属性 磁盘的物理结构​编辑 磁盘的存储结构 磁盘的逻辑结构 块 磁盘分区 文件 内容 属性 一个文件可以是被打开的文件&#xff0c;也可以是未被打开的文件 被打开的文件就是在内存中&#xff0c;未被打开的文件一般就是放在磁盘上的 为什么要放…

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…

LabVIEW时域近场天线测试

随着通信技术的飞速发展&#xff0c;特别是在5G及未来通信技术中&#xff0c;天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试&#xff0c;传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势&#xff0c;可以提供更快速和精准的…

AI 大爆发时代,音视频未来路在何方?

AI 大模型突然大火了 回顾2024年&#xff0c;计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程&#xff1a; 萌芽期&#xff1a;&#xff08;1950-2005&#xff09; 1956年&#xff1a;计算机专家约翰麦卡锡首次提出“人工智能”概念&#xff0c;标志…

【逆境中绽放:万字回顾2024我在挑战中突破自我】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…

前端小案例——网页井字棋

前言&#xff1a;我们在学习完了HTML、CSS和JavaScript之后&#xff0c;就会想着使用这三个东西去做一些小案例&#xff0c;不过又没有什么好的案例让我们去练手&#xff0c;本篇文章就提供里一个案例——网页井字棋。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可…

FPGA车牌识别

基于FPGA的车牌识别主要包含以下几个步骤&#xff1a;图像采集、颜色空间转换、边缘检测、形态学处理&#xff08;腐蚀和膨胀&#xff09;、特征值提取、模板匹配、结果显示。先用matlab对原理进行仿真&#xff0c;后用vivado和modelsim进行设计和仿真。 一、1.图像采集采用ov…

java使用poi-tl自定义word模板导出

文章目录 概要整体架构流程创建word模板核心代码导出结果 概要 在软件开发领域&#xff0c;自定义Word模板的使用是导出格式化数据的一种常见做法。poi-tl&#xff08;Apache POI Template Language&#xff09;作为一款基于广受认可的Apache POI库的Word模板引擎&#xff0c;…

Java 视频处理:基于 MD5 校验秒传及 ffmpeg 切片合并的实现

本文介绍两种网络技术实现方法。一是 MD5 校验秒传&#xff0c;服务器端用数据库记上传文件 MD5 值及存储路径&#xff0c;Java 代码接收客户端 MD5 值并查询校验&#xff0c;返回状态码。二是用 ffmpeg 切片视频成 m3u8 上传&#xff0c;异步合并文件实现视频按需加载。 1. …

JEL分类号

JEL分类系统&#xff0c;是美国经济学会“经济文献杂志”(《经济文献杂志》)所创立的对经济学文献的主题分类系统&#xff0c;并被现代西方经济学界广泛采用。 该分类方法主要采用开头的一个英文字母与随后的两位阿拉伯数字一起对经济学各部类进行“辞书式”编码分类。 https:…

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo&#xff1a;编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo&#xff1a;编辑学生信息 4.TreeWidget控件 核心方法 核心信号…

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query&#xff1a;查询词SUG&#xff1a;搜索建议文档&#xff1a;搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光&#xff1a;用户在搜索结果页上看到文档&#xff0c;就算曝光文档点击&#xff1a;在曝光后&#xff0c;用户点击文档&…

Vulnhub-Tr0ll靶机笔记

Tr0ll靶机笔记 概述 靶机地址&#xff1a;https://www.vulnhub.com/entry/tr0ll-1,100/ 这台靶机比较简单&#xff0c;包含ftp的渗透&#xff0c;pcap流量包的分析&#xff0c;常规的web渗透和系统内核提权。让我们开始吧 Hack it&#xff01; 一、nmap扫描 1、端口扫描 …

uniapp 微信小程序 editor 富文本编辑器

<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…

Java定时任务不明原因挂掉(定时任务挂掉)以及建议

在Java企业级开发中&#xff0c;Spring框架的定时任务功能&#xff08;通常通过Scheduled注解实现&#xff09;因其易用性和灵活性而备受青睐。然而&#xff0c;当这些定时任务在生产环境中莫名停止时&#xff0c;往往会让开发者头疼不已。 一、常见原因剖析 1.线程或资源耗尽…

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…

Jenkins-基于Role的鉴权机制

jenkins自带了一些全局性的安全配置。 但无法通过job等相对细粒度的来控制使用者的权限。但它可以借助相关的插件实现细颗粒的权限控制。 插件&#xff1a; Role-based Authorization Strategy 需要在configure global security中配置授权策略如下&#xff1a; 保存后&#x…