Qt -- QFile文件读写操作

article/2025/8/23 15:11:22

对于文件的读写操作,C 和 C++ 都各有一套方式。而在 Qt 中也有一套,即使用 QFile 对文件进行读和写操作。

文件的打开方式

在这里插入图片描述
文件路径说明:(windows-release编译)

QFile *file = new QFile("EcgCap.dat");

表示这个文件默认在(与Makefile同级)
在这里插入图片描述
而非.pro文件的同级目录中,也不是release文件下。

对文件进行读操作

首先创建一个新的工程,以下操作为了迎合 嵌入式Linux 开发,决定在 ubuntu 中进行,并使用 rsync 进行远程调试。

首先,窗体中搭建一个场景,并且将窗体固定为开发板屏幕的大小为1024 * 600 。

搭建步骤如下:首先,将控件 LineEdit 和 PushButton 放入到 Widget 控件中,然后点击选中 Widget 控件 ,使用水平对齐,之后将控件 TextEdit 拖拽到窗体上(通过拉伸,将该控件拉大一些),最后,选中整个窗体,使用垂直对齐,就变成下图所示了
在这里插入图片描述
其次,想要实现这样一个目的:当点击 选取文件 按钮时,弹出一个文件对话框,然后把选取的文件路径放到 LineEdit 控件中,文件中的具体内容则显示在 TextEdit 中。我在目录为 /work/resource/ 中准备了两个文件,文件内容一样,采用不同的编码,如下图所示。
在这里插入图片描述
切换到代码 mainwindow.cpp 来。

在前面,我们已经介绍了文件对话框的相关知识,如果不清楚可以翻到前面看下。

代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//点击新建按钮,弹出一个文件对话框connect(ui->pushButton,&QPushButton::released,[=](){//文件对话框 -- 返回选中文件的文件路径QString path = QFileDialog::getOpenFileName(this,"选取文件","/home/chantui/work/resourceFile","Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");//将路径放入到 LineEdit 控件中//一般设置文本的函数都叫做setTextui->lineEdit->setText(path);//读取内容放到 TextEdit 控件中QFile file(path);//参数就是读取文件的路径//设置打开方式(读还是写或是其他)file.open(QIODevice::ReadOnly);//通过readAll函数可以将文件内容都给读出来//这个函数返回一个 QByteArray 类类型的值,因此可以去接收这个返回值QByteArray bytearray = file.readAll();//将读取到的数据放入到 textEdit 中,同样使用 setText 这个函数//因为 setText 这个函数所需要的参数是 QString 类型,所以需要进行格式转换//但这里在编译的时候会自动进行隐式转换,所以并不需要进行格式转换。ui->textEdit->setText(bytearray);});
}MainWindow::~MainWindow()
{delete ui;
}

运行结果如下:

打开 utf8 编码的文件,结果如下:
在这里插入图片描述
打开 ansi 编码的文件,结果如下:(可以使用抛出异常的方式来解决
在这里插入图片描述
QFile 默认支持的是 utf8 格式(Unicode编码的一种),而ANSI格式的文件则是GBK编码。 那 QFile 就没有办法读取了吗?并不是,需要用到 QT 中编码格式的一个类 QTextCodec 。

使用 QTextCodec 这个类需要添加头文件 #include <QTextCodec>

之后,使用这个类中的一个静态方法 codecForName , 并传入将要读取到的文件(字符串)的编码格式是什么。

//codecForName 是这个类中的一个静态方法,这里指定以"gbk"的编码格式来读取
QTextCodec *codec = QTextCodec::codecForName("gbk");

之后,传入要读取文件的路径,指定打开方式,并读取文件内容。

QFile file(path);//参数就是读取文件的路径
//设置打开方式(读还是写或是其他)
file.open(QIODevice::ReadOnly);
//通过readAll函数可以将文件内容都给读出来
//这个函数返回一个 QByteArray 类类型的值,因此可以去接收这个返回值
QByteArray bytearray = file.readAll();

最后,也是关键的一步骤,将读取到的文件内容先转换成 Unicode 编码格式(需要用到 toUnicode() 这个函数),再显示出来。

 ui->textEdit->setText(codec->toUnicode(bytearray));

运行代码来看下:
在这里插入图片描述
但是,当这样转换之后,又不支持 utf8 格式的文件了,来看下。
在这里插入图片描述
因此,如果要同时支持的话,就需要做一个判断,恰好在 " 电子书 " 这个项目中,我学会了。^ _ ^

在前面代码中,我们采用的是 readAll() 这种方法将文本内容直接读取出来了,下面再来介绍另外一种方式 readAll() — 按行来读取。

代码如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//点击新建按钮,弹出一个文件对话框connect(ui->pushButton,&QPushButton::released,[=](){//文件对话框 -- 返回选中文件的文件路径QString path = QFileDialog::getOpenFileName(this,"选取文件","/home/chantui/work/resourceFile","Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");//将路径放入到 LineEdit 控件中//一般设置文本的函数都叫做setTextui->lineEdit->setText(path);//读取内容放到 TextEdit 控件中QFile file(path);//参数就是读取文件的路径//设置打开方式(读还是写或是其他)file.open(QIODevice::ReadOnly);QByteArray array;//通过readline函数一行一行的将文件内容给读出来//通过atEnd()这个方法来判断是否读到文件尾while(!file.atEnd()){array += file.readLine();}ui->textEdit->setText(array);});
}

运行结果也跟上面一样(读取的是 utf8 格式的文件)。

上面一直忘了一件很重要的事情就是不对文件进行操作时,要关闭文件。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//点击新建按钮,弹出一个文件对话框connect(ui->pushButton,&QPushButton::released,[=](){.........//对文件对象进行关闭file.close();});
}

对文件进行写操作

如果采用只写( WriteOnly )的方式打开文件,源文件中的内容会被覆盖。这里采用追加(Append)的方式来打开文件,再进行写操作。

//设置打开方式(追加的方式打开,然后再写)
file.open(QIODevice::Append);
file.write("实干兴邦");
file.close(); 

http://chatgpt.dhexx.cn/article/BAK2c20R.shtml

相关文章

[QT_032]Qt学习之基本文件读写QFile

本文转自&#xff1a;《Qt编程指南》 作者&#xff1a;奇先生 Qt编程指南&#xff0c;Qt新手教程&#xff0c;Qt Programming Guide 7.2 基本文件读写QFile Qt 常见的文件读写类有三个 QFile、QTextStream 和 QDataStream&#xff0c;本节先概要介绍这三个文件读写类&…

QFileInfo

一、描述 QFileInfo 提供有关文件系统中文件的名称和位置&#xff08;路径&#xff09;、访问权限、文件类型等信息。 FileInfo 还可用于获取有关 Qt 资源的信息。这个类是隐式共享的。 二、成员函数 2.1、判断函数 1、bool isAbsolute() 文件路径是否绝对路径。 注意&am…

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

目录 一、QFile文件如果不存在则创建的方法 二、QFile判断文件是否存在的方法 三、QFileInfo的方法获得文件的各种详细信息 四、QFile读写文件的内容 一、QFile文件如果不存在则创建的方法 QFile f("./1234.ini");if(!f.open(QIODevice::Append)){return 0;} op…

QFile文件读写

文章目录 简介常用apiQFile类读写文件QFileQTextStream读写文件 简介 QFile类提供了一个读取和写入文件的接口&#xff0c;一个读写文本、二进制文件和资源的I/O设备。 QFile读写文件的两种方式&#xff1a; 1.QFile可以单独使用。 2.QFile与QTextStream或QDataStream一起使用…

Qt之Qfile读取文件操作

文件系统&#xff1a;   文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力。下面是 I/O 设备的类图&#xff08;Qt5&#xff09;&#x…

常用性能测试工具的比较

目录 性能测试的重要性针对接口的性能测试 性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具 参考总结 性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用&#xff0c;尤其是对于互联网产品这种具有大用户量&#xff0c;大数据量&a…

推荐几款常用的性能测试工具

“ 对内容不感兴趣拉到最后领取今天的外卖红包。” 常用的性能测试工具 对于开发人员来说&#xff0c;首选是一些开源免费的性能&#xff08;压力&#xff09;测试软件&#xff0c;例如 ab&#xff08;ApacheBench&#xff09;、JMeter 等&#xff1b;对于专业的测试团队来说&…

10款主流的软件测试工具,你用过吗?

随着软件快速交付需求的增长&#xff0c;越来越多的企业开始通过DevOps方法加速软件开发速度但这样的话&#xff0c;有时候就无法保证质量&#xff0c;所以今天小编就来给大家介绍10款主流的软件测试工具&#xff0c;供大家参考。 1、UFT / QTP UFT&#xff0c;前身为Quick …

10款好用的自动化测试工具

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群&#xff0c;加入我们&#xff0c;一…

常用的软件测试工具大全

开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator **[TestDirector]&…

软件测试工作中有哪些常用的工具?

软件测试工作中有哪些常用的工具&#xff1f;一般来说有开源测试管理工具、开源功能自动化测试工具、开源性能自动化测试工具、Quality Center、QuickTest Professional、LoadRunner等。 一、推荐10款常见的软件测试工具: &#xff08;1&#xff09;Bugfree BugFree是借鉴微软的…

我们常用的软件测试工具有哪些?

一名优秀的软件测试工程师&#xff0c;我觉得他一定也是一名善用工具的好手&#xff0c;他知道在软件测试领域都有哪些测试工具&#xff0c;这些工具都有什么优缺点&#xff0c;这些工具适合在什么情况下使用 &#xff0c;反馈的结果是什么&#xff0c;知道各种工具之间如何配合…

测试工具类

目录 测试接口管理工具&#xff1a; Swagger Eolink APIKit Apipost7  Apifox 自动化测试平台&#xff1a; Choerodon猪齿鱼 MeterSphere RPA 自动化测试框架 Appium Robot Framework Selenium python 自动化测试框架 1.Robot Framework 2.Pytest 3.UnitTest…

软件测试工具有哪些(软件测试常用的工具都有哪些)

一、一个从事软件测试行业十年的老司机列出以下与软件测试相关的工具&#xff1a; 1.操作系统&#xff1a; Linux&#xff1a;vmware、xshell 、xftp 、ssh2.数据库&#xff1a; 主流是以下三种数据库&#xff0c;尤其是MySQL以及oralce,在测试中必会的技能是对表的相关操作&…

软件测试工具都有哪些

小编今天把软件测试常见的工具列了一下&#xff0c;看看有没有你现在在用的&#xff1f; 开源测试管理工具&#xff1a;Bugfree、Bugzilla、TestLink、mantis 开源功能自动化测试工具&#xff1a;Watir、Selenium、MaxQ、WebInject 开源性能自动化测试工具&#xff1a;Jmeter…

10大主流性能测试工具,总有一款适合你

市面上流行的压力/负载/性能测试工具多是来自国外&#xff0c;近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同&#xff0c;其功能也有很大差异&#xff0c;下面就为您简单介绍10款目前最常见的测试产品。 01 kylinTOP测试与监控平台&#xff08;商…

10个常用的软件测试工具,你不容错过

在现代软件开发中&#xff0c;软件测试是不可或缺的一部分。为了确保软件产品的质量和稳定性&#xff0c;软件测试工具成为了测试团队的得力助手。 有许多优秀的软件测试工具可以帮助测试人员在各种测试活动中提高效率和准确性。 本文将介绍10个常用的软件测试工具&#xff0c;…

Android 实现锚点定位

相信做前端的都做过页面锚点定位的功能&#xff0c;通过<a href"#head"> 去设置页面内锚点定位跳转。 本篇文章就使用tablayout、scrollview来实现android锚点定位的功能。 效果图&#xff1a; 实现思路 1、监听scrollview滑动到的位置&#xff0c;tablayout切…

为什么定位不了HTML,css 锚点定位不了

css 锚点定位不了 css 锚点定位不了只有一个原因&#xff0c;就是书写错误&#xff0c;锚点的正确书写方式有两种&#xff0c;下面为各位介绍一下。 1、使用a标签设置锚点&#xff1a; ①&#xff1a;设置一个锚点链接 html&#xff1b;(注意&#xff1a;href属性的属性值最前面…

vue项目中实现锚点定位

使用场景&#xff1a;当页面被分割成许多小模块&#xff0c;且页面很长时&#xff0c;锚点功能可以帮助我们快速跳转到想要的模块&#xff1b;而当滑动滚动条时&#xff0c;根据当前视图中的显示的模块自动选中对应的锚点。 思路 锚点的id对应模块的元素的id。点击锚点时&#…