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

Qt5开发从入门到精通——第九篇一节( Qt5 文件及磁盘处理—— 读写文本文件)

CSDN话题挑战赛第2期
参赛话题:学习笔记

欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀

前言

本章节会给大家带来Qt5文件及磁盘处理概述及读写文本文件的开发实例详解。

一、Qt5文件及磁盘处理概述

Qt 提供了 QFile 类用于进行文件操作。 QFile 类提供了读写文件的接口,可以读写文本文件、二进制文件和 Qt 的资源文件。
处理文本文件和二进制文件,可以使用 QTextStream 类和 QDataStream 类。处理临时文件可以使用 QTemporaryFile, 获取文件信息可以使用 QFilelnfo, 处理目录可以使用 QDir, 监视文件和目录变化可以使用 QFileSystemWatcher 。
读写文本文件的方法通常有两种:一种是直接利用传统的 QFile 类方法;另一种是利用更为方便的 QTextStream 类方法。

二、效果实例

图一
读取文本文件
新建文本文件输入 Welcome to you! 并另存为ANSI格式,将文件改名为textFile.txt 并放在改工程构建的文件夹内。
在这里插入图片描述
图二
写入文本文件,生成的文本文件会在构建文件夹中。
在这里插入图片描述

三、原码解析

建立基于控制台工程,使用 QFile 类读写文本文件
(I) 建立一个工程。选择“文件" – “新建文件或项目…”菜单项,在弹出的对话框中选择”项目”组下的 “Application” – " Qt Console Application” 选项,单击 “Choose…”按钮。
(2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名为"TextFile”, 单击“下一步”按钮,再次单击“下一步”按钮,最后单击“完成”按钮,完成该文件工程的建立。

1. QTextStream 的格式化函数

qSetFieldWidth(int width):设置字段宽度
qSetPadChar(QChar ch):设置填充字符
qSetRealNumberPercision(int precision):设置实数精度

2. QTextStream 的流操作符

bin :设置读写的整数为二进制数
oct :设置读写的整数为八进制数
dec : 设置读写的整数为十进制数
hex :设置读写的整数为十六进制数
showbase :强制显示进制前缀,如十六进制 (0x) 、八进制 (0) 、二进制 (0b)
forcesign :强制显示符号(+, -)
forcepoint :强制显示小数点
noshowbase :不显示进制前缀
noforces1gn :不显示符号
uppercasebase: 显示大写的进制前缀
lowercasebase: 显示小写的进制前缀
uppercasedigits: 用大写字母表示
lowercasedigits: 用小写字母表示
fixed: 用固定小数点表示
scientific: 用科学计数法表示
left : 左对齐
right: 右对齐
center: 居中
endl: 换行
flush: 清除缓冲

3.1、读文本文件原码

main.cpp

#include <QCoreApplication>
#include <QFile>
#include <QtDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("textFile.txt"); /*打开一个文件有两种方式。一种方式是在构造函数中指定文
件名;另一种方式是使用 setFileName() 函数设置文件名。*/
    if (file. open (QIODevice::ReadOnly))/*打开文件使用 open() 函数,关闭文件使用 close()
函数。此处的 open()函数以只读方式打开文件,只读方式参数为 QIODevice:: ReadOnly, 只写方
式参数为 QIODevice::WriteOnly, 读写参数为 QIODevice:: ReadWrite 。*/
    {
        char buffer[2048];
        qint64 lineLen = file.readLine(buffer,sizeof(buffer));/*在 QFile 中可以使用从 QIODevice
中继承的 readLine()函数读取文本文件的一行。*/
        if(lineLen!=-1)/*如果读取成功,则 readLine()函数返回实际读取的
字节数;如果读取失败,则返回 "-1" 。*/
        {
            qDebug ()<<buffer;
        }
    }
    return a.exec();
}

3.2、写文本文件原码

main.cpp

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile data("data.txt");
  if (data. open (QFile::WriteOnly|QFile::Truncate)) /*参数 QFile::Truncate 表示将原来文件
中的内容清空。输出时将格式设为左对齐,占 10 个字符位置。*/
  {
      QTextStream out(&data);
      out<<QObject::tr("")<<qSetFieldWidth(10)<<left<< endl;
      out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl; /*用户使用格式化函
数和流操作符设置需要的输出格式。其中, qSetFieldWidth()函数是设置字段宽度的格式化函数。*/
      out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
      out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
      out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
      out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;

  }

    return a.exec();
}

四、总结

Qt5 文件及磁盘处理—— 读写文本文件会在应用程序开发中经常用到的

相关文章:

  • ⌈Linux_ 感受系统美学⌋ 抛开图形化界面,深入探索命令行操作系统
  • 09-28 周三 使用朴素贝叶斯进行垃圾邮件处理
  • python+cuda编程(二)
  • 攻防世界-filemanager
  • 软件项目管理简答题
  • Spring源码分析(二):底层架构核心概念解析
  • vue3 watch的各种使用情景
  • Dubbo(二)
  • Qt6.3.2下QChart的使用
  • GAM注意力机制
  • ts流中的时间概念: pcr,pts,dts 实例解说
  • 申请ISO50430建筑体系认证有哪些注意问题?
  • MyEclipse技术深度剖析——企业级的Java EE Jakarta EE IDE
  • 一分钟学会Selenium
  • 【网络安全】逻辑漏洞保姆级讲解
  • android 一些 utils
  • Angular Elements 及其运作原理
  • input实现文字超出省略号功能
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 技术胖1-4季视频复习— (看视频笔记)
  • 聊聊flink的BlobWriter
  • 深度学习入门:10门免费线上课程推荐
  • 试着探索高并发下的系统架构面貌
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 我与Jetbrains的这些年
  • 智能合约Solidity教程-事件和日志(一)
  • Mac 上flink的安装与启动
  • NLPIR智能语义技术让大数据挖掘更简单
  • # .NET Framework中使用命名管道进行进程间通信
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (27)4.8 习题课
  • (C语言)球球大作战
  • (LeetCode C++)盛最多水的容器
  • (笔试题)分解质因式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .Net 6.0 处理跨域的方式
  • .net Application的目录
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net(C#)中String.Format如何使用
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @angular/cli项目构建--Dynamic.Form
  • @Conditional注解详解
  • @Valid和@NotNull字段校验使用
  • @软考考生,这份软考高分攻略你须知道
  • [BT]BUUCTF刷题第4天(3.22)
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C#7] 1.Tuples(元组)
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用