QT从入门到入土(四)——文件的读写操作

2023-11-17

引言
文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处理而开发的,所以文件读写是应用程序开发的一个基本功能。

Qt 提供了两种读写纯文本文件的基本方法:

用 QFile 类的 IODevice 读写功能直接进行读写
利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。
一、文件读操作
(1)使用QFile类

Qt封装了QFile类,方便我们对文件进行操作,可以按照如下的步骤进行:

使用QFile加载文件对象
打开文件 file.open(打开方式)
操作文件
关闭文件 file.close()
实例:点击读写文件按钮,读取文件内容到textEdit中

1️⃣设置ui界面
在这里插入图片描述

2️⃣在widget.cpp中编辑代码(QFileDialog类是打开文件)

 //点击选取文件按钮,弹出文件对话框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
    QString path=  QFileDialog::getOpenFileName(this,"打开文件","C:/Users/WFD/Desktop");
   //将路径显示在lineEdit中
   ui->lineEdit->setText(path);

      //读取文件内容,放入textEdit中
      QFile file(path);//参数就是文件的路径
      //设置打开方式
      file.open(QIODevice::ReadOnly);
      //用QByteArray类去接收读取的信息
      QByteArray array=file.readAll();
      //将读取到的数据放入textEdit中
      ui->textEdit->setText(array);
      //关闭文件对象
      file.close();

在这里插入图片描述

注意:在设置打开方式的时候

QFile::open() 函数打开文件时需要传递 QIODevice::OpenModeFlag 枚举类型的参数,决定文件以什么方式打开,QIODevice::OpenModeFlag 类型的主要取值如下:

QIODevice::ReadOnly  //以只读方式打开文件,用于载入文件。
QIODevice::WriteOnly  //以只写方式打开文件,用于保存文件。
QIODevice::ReadWrite //以读写方式打开。
QIODevice::Append  //以添加模式打开,新写入文件的数据添加到文件尾部。
QIODevice::Truncate //以截取方式打开文件,文件原有的内容全部被删除。
QIODevice::Text       //以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如 Windows 平台下是“\r\n”。

这些取值可以组合,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

注意:在操作文件时

用只读方式打开一个文本文件,然后用readAll()方法将文件内容一次全部读取出来,返回值是字节数组QByteArray。QByteArray用来存放二进制数据,如果想要看文字内容需要转换成QString。(有时候系统会自动转换)

我们也可以使用readLine方法一次读取一行,然后每次对一行文字进行操作:(用file.atEnd判断是否读到最后一行)

QByteArray array;
  while(!file.atEnd())
  {
       array+=file.readLine();//+=叠加读过的行
  }

(2)使用QTextStream类

如果操作的是文本文件,Qt还专门封装了一个处理文本流的类,我们可以用它来读取文本内容

  //点击选取文件按钮,弹出文件对话框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
      QString path=  QFileDialog::getOpenFileName(this,"打开文件","C:/Users/WFD/Desktop");
      //将路径放在lineEdit中
      ui->lineEdit->setText(path);
      //读取文件内容,放入textEdit中
      QFile file(path);//参数就是文件的路径
      //设置打开方式
      file.open(QIODevice::ReadOnly);
      //用QTextStream类去读取文本信息
     QTextStream QS(&file);
     //用QString类去接收读取的信息
     QString array=QS.readAll();
      //将读取到的数据放入textEdit中
      ui->textEdit->setText(array);
      //关闭文件对象
      file.close();

二,文件写操作

(1)使用QFile类
使用QFile同样可以对文件进行写操作:
在这里插入图片描述

(2)使用QTextStream类
QTextStream类对操作符进行了重载,我们可以通过 << 操作符将字符串流入文本文件:
在这里插入图片描述

三,文件信息读取
除了对文件的读写操作,Qt还封装了QFileInfo类帮助我们获取文件的元数据,比如文件大小、后缀名、创建时间、最后修改时间等等:
在这里插入图片描述

拓展:

各编码转换

QString -> QByteArray      QString.toUtf8();

QByteArray -> std::string  QByteArray.toStdString();

std::string -> char *        string.date();

常用静态函数

QFileDialog::getOpenFileName()    //获取指定文件路径名返回QString
QFileDialog::getExistingDirectory()  //获取指定路径返回QString
QFileDialog::getSaveFileName()    //获取指定保存路径名返回QString

QT配置ini文件的建立,读取,写入操作

1 ini文件介绍

.ini 文件是Initialization File的缩写,即初始化文件。

除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要求。一般不用直接编辑这些.ini文件,应用程序的图形界面即可操作以实现相同的功能。它可以用来存放软件信息,注册表信息等。

2 ini文件格式

INI文件由节、键、值组成。

节

  [section] 

参数(键=值)

name=value

下面是一个ini文件的例子

[Section1 Name]   

KeyName1=value1   

KeyName2=value2   

...   

[Section2 Name]   

KeyName21=value21   

KeyName22=value22 

其中:[Section1 Name]用来表示一个段落。因为INI文件可能是项目中共用的,所以使用[Section Name]段名来区分不同用途的参数区。例如:[Section1 Name]表示传感器灵敏度参数区;[Section2 Name]表示测量通道参数区等等。

注解:使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

3 Qt写ini文件

#include <QApplication>
#include <QSettings>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //Qt中使用QSettings类读写ini文件
    //QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
    QSettings *configIniWrite = new QSettings("hahaya.ini", QSettings::IniFormat);
    //向ini文件中写入内容,setValue函数的两个参数是键值对
    //向ini文件的第一个节写入内容,ip节下的第一个参数
    configIniWrite->setValue("/ip/first", "192.168.0.1");
    //向ini文件的第一个节写入内容,ip节下的第二个参数
    configIniWrite->setValue("ip/second", "127.0.0.1");
    //向ini文件的第二个节写入内容,port节下的第一个参数
    configIniWrite->setValue("port/open", "2222");
    //写入完成后删除指针
    delete configIniWrite;
    return a.exec();
}

运行程序后,打开程序目录下的hahaya.ini文件,结果如下图所示:
在这里插入图片描述

4 Qt读ini文件

#include <QApplication>
#include <QSettings>
#include<QDebug>
int main(int argc, char *argv[])
{
      QApplication a(argc, argv);
      QSettings *configIniRead = new QSettings("hahaya.ini", QSettings::IniFormat);
      //将读取到的ini文件保存在QString中,先取值,然后通过toString()函数转换成QString类型
      QString ipResult = configIniRead->value("/ip/second").toString();
      QString portResult = configIniRead->value("/port/open").toString();
      //打印得到的结果
      qDebug() << ipResult;
      qDebug() << portResult;
      //读入入完成后删除指针
      delete configIniRead;
      return a.exec();
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT从入门到入土(四)——文件的读写操作 的相关文章

随机推荐

  • 【unity】Shader.SetGlobalFloat/Vector/Texture 不生效

    Shader SetGlobalFloat Shader SetGlobalVector Shader SetGlobalTexture等等函数不生效是为什么 答 shader的properties要去掉对应的变量 也就是说shader获取
  • echarts的基本使用

    一 基本使用 1 导入echarts js 下载并导入 地址 https echarts apache org zh download html 使用 CDN 方法 https cdn staticfile org echarts 4 3
  • C++ private,public,protected的访问范围解析

    第一 private public protected的访问范围 private 只能由该类中的函数 其友元函数访问 不能被任何其他访问 该类的对象也不能访问 protected 可以被该类中的函数 子类的函数 以及其友元函数访问 但不能被
  • BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.NullPointerException

    集成mybatis plus sqlSessionFactory改为MybatisSqlSessionFactoryBean后 项目无法启动
  • 团队新人多,稳定性经验不足,研发质量怎么保障?|TakinTalks论道

    一分钟精华速览 在研发和稳定性保障过程中 人与设备 程序 组织的交互是一个复杂的过程 虽然人们极少会恶意犯错 但由于受特定情景下的实际条件影响 人为失误也时有发生 那么 如何尽可能减少这些失误的发生 如何保障研发质量和系统稳定 TakinT
  • 读《大数据时代》有感

    大数据时代 读后感 大数据时代 这本书主要描述的是大数据时代到临人们生活 工作与思维各方面所遇到的重大变革 文中清晰的阐述了大数据的基本概念和特点 并列出明确的观点 不管对于产业实践者 还是对于政府和公众机构 都非常具有价值 作者将本书分为
  • STM32系列(HAL库)——F103C8T6驱动WS2812全彩RGB模块(PWM+DMA方式)

    1 软件准备 1 编程平台 Keil5 2 CubeMX 2 硬件准备 1 某宝买的RGB模块 4个灯珠级联 2 F1的板子 本例使用经典F103C8T6 3 ST link 下载器 4 杜邦线若干 3 模块资料 1 模块简介 没什么比手册
  • 图像目标检测之cascade-rcnn实践

    最近一直在调试目标检测方面的模型 其中mmdetection中就集成了许多的目标检测模型 其中表现比较好的模型中有cascade rcnn 因此也趁这个机会具体了解一下这个模型的发展脉络 1 模型原理 在two stage模型中 常见都会预
  • 【网络云盘客户端】——项目简介

    项目简介 网络云盘客户端时基于QT C 框架实现了一个网络云盘客户端软件 主要功能包括用户的注册 登录 显示用户的个人文件列表 以及文件的上传 下载 删除 共享文件 登录界面 主窗口界面 文件属性对话框 文件展示列表 上传文件 详细实现参考
  • 【图像处理】 常用边缘检测算法对比分析

    边缘的定义 首先介绍什么是边缘 在数字图像中 边缘是指图像局部变化最显著的部分 边缘主要存在于目标与目标 目标与背景之间 是图像局部特性的不连续性 如灰度的突变 纹理结构的图标 颜色的图标等 尽管图像的边缘点产生的原因各不相同 但他们都是图
  • [操作系统] 分页存储管理中的页表项长度

    看到很多人有疑问 读到这里的时候我也有疑问的 在操作系统的分页存储管理方式中 写道 将页表始址与页号和页表项长度的乘积相加 便得到该表项在页表中的位置 于是可从中得到该页的物理块号 将之装入物理地址寄存器中 列出式子出来 页表始址 页号x页
  • Java excel poi 下载模板功能无法在Microsoft Excel 打开,但是可以WPS Excel打开

    问题 并且只显示前几个字段 后面的几个字段不显示 版本使用
  • 我的 Android 求职简历

    昨晚在Diycode的微信交流群里面 有位在校的童鞋想要找一份开发的实习工作 他把简历做好后在群上共享了一份 我看到后便下载了一份 看了看简历内容 我在想如果我是招聘单位看简历的 这份简历可以说是基本没戏的 因为内容基本和开发没有多大关系
  • Qt5Error:msvc-version.conf loaded but QMAKE_MSC_VER ins‘t set

    错误描述 msvc version conf loaded but QMAKE MSC VER ins t set 解决方案 这种情况一般都是修改了项目的配置之后出现的 也就是 qmake stash文件出错 删除这个文件再进行重新编译即可
  • 基于python的布尔盲注爆破脚本(sqli-libs第八关)

    写这个脚本的原因是因为布尔爆破步骤的繁琐 因此写下这个半自动化脚本来提升效率 只需输入url和标志词便可开始爆破 下面结合sqli libs第八关来详细说明 这一关是布尔盲注 布尔盲注用于页面没有回显的情况下 但是心细的同学会发现当我们注入
  • 使用Microsoft.Reporting. WebForms中ReportViewer报表查看器(Server方式)

    添加Web Reference http
  • Flex程序编译

    Makefile三要素 目标 依赖 命令 详解可见makefile 编写 周北 CSDN博客 makefile 编写 Makefile中常用函数和自动化变量 wildcard 扩展通配符 例 OBJECTS wildcard o 该找到目标
  • C++构造函数中不调用虚函数的原因

    今天在看网上一篇帖子的时候看到这个问题 试讲关于C 对象虚函数表和类型信息的 RTTI 的 正好看到了如下内容 这个是为什么在构造函数中不能调用虚函数的原因 因为任何时候在基类中的虚函数调用 都不可能到达子类的实现 因为子类的虚表初始化是在
  • [docker]搭建elasticsearch服务

    1 拉取镜像 docker pull elasticsearch 8 7 0 如果需要其他版本的话 访问 Dockerhttps hub docker com ela
  • QT从入门到入土(四)——文件的读写操作

    引言 文件的读写是很多应用程序具有的功能 甚至某些应用程序就是围绕着某一种格式文件的处理而开发的 所以文件读写是应用程序开发的一个基本功能 Qt 提供了两种读写纯文本文件的基本方法 用 QFile 类的 IODevice 读写功能直接进行读