Qt文件读写

Qt文件读写(Stream流形式)

文件读写相关类

1. QFile类

QFile主要用于文件的打开、关闭等功能;

[override virtual] bool QFile::open(QIODevice::OpenMode mode);

Reimplements: QIODevice::open(QIODevice::OpenMode mode).
Opens the file using OpenMode mode, returning true if successful; otherwise false.
The mode must be QIODevice::ReadOnly, QIODevice::WriteOnly, or QIODevice::ReadWrite. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.
重新实现:QIODevice::open(QIODevice::OpenMode模式)。
使用OpenMode模式打开文件,如果成功则返回true,否则错误。
模式必须为QIODevice::ReadOnly、QIODevice::WriteOnly或QIODevice::ReadWrite。它也可能有额外的标志,如QIODevice::Text和QIODevice::Unbuffered。

[virtual] void QIODevice::close();

First emits aboutToClose(), then closes the device and sets its OpenMode to NotOpen. The error string is also reset.
首先发出aboutToClose(),然后关闭设备并将其OpenMode设置为NotOpen。错误字符串也会被重置。

2. QTextStream类

读取一行

bool QTextStream::readLineInto(QString *line, qint64 maxlen = 0);

Reads one line of text from the stream into line. If line is 0, the read line is not stored.
The maximum allowed line length is set to maxlen. If the stream contains lines longer than this, then the lines will be split after maxlen characters and returned in parts.
If maxlen is 0, the lines can be of any length.
The resulting line has no trailing end-of-line characters (“\n” or “\r\n”), so calling QString::trimmed() can be unnecessary.
If line has sufficient capacity for the data that is about to be read, this function may not need to allocate new memory. Because of this, it can be faster than readLine().
Returns false if the stream has read to the end of the file or an error has occurred; otherwise returns true. The contents in line before the call are discarded in any case.
将一行文本从流读入行。如果line为0,则不存储读行。
允许的最大线路长度设置为maxlen。如果流包含超过这个长度的行,那么这些行将在maxlen字符之后分割并以部分形式返回。
如果maxlen为0,则行可以是任意长度。
结果行没有尾随的行尾字符(“\n”或“\r\n”),因此调用QString::trim()可能是不必要的。
如果行有足够的容量来存储即将读取的数据,则该函数可能不需要分配新的内存。正因为如此,它可以比readLine()更快。
如果流已读取到文件的末尾或发生错误,则返回false;否则返回true。在任何情况下,调用之前行的内容都将被丢弃。

写入

QTextStream &QTextStream::operator<<(XXX xxx);

文件读取示例

先写入数据到一个csv文件,再读取csv文件的内容

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDebug>struct TimeValue
{double m_dTime;double m_dValue;TimeValue(double dTime = 0.0, double dValue = 0.0) : m_dTime(dTime), m_dValue(dValue){// ...}
};// 写入函数
void WriteFile()
{QFile file(QString(QCoreApplication::applicationDirPath() + "/data.csv"));if (!file.open(QIODevice::WriteOnly))qDebug() << "Write Open file failed!";QTextStream textStream(&file);textStream << "time, value\n";for (int i = 0; i != 10; ++i)textStream << QString::number(i) << "," << QString::number(i * 100) << "\n";file.close();
}// 读取函数
void ReadFile()
{QFile file(QString(QCoreApplication::applicationDirPath() + "/data.csv"));if (!file.open(QIODevice::ReadOnly | QIODevice::Text))qDebug() << "Read Open file failed!";QTextStream textStream(&file);QString strLine;textStream.readLineInto(&strLine);QVector<TimeValue> vecTimeValue;// 读取一行的字符串数据while (textStream.readLineInto(&strLine)){TimeValue timeValue;QStringList strList = strLine.split(",");timeValue.m_dTime = strList[0].toDouble();timeValue.m_dValue = strList[1].toDouble();vecTimeValue.push_back(timeValue);}file.close();
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);WriteFile();ReadFile();return a.exec();
}

文件数据样式:
在这里插入图片描述

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

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

相关文章

[特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]

大家好&#xff01;今天给大家分享一个 Java Socket 线程池 实现的高性能文件上传服务器&#xff0c;支持 多客户端并发上传&#xff0c;代码可直接运行&#xff0c;适合 面试、项目实战、性能优化 学习&#xff01; &#x1f4cc; 本文亮点&#xff1a; ✅ 完整可运行代码&a…

Python proteinflow 库介绍

ProteinFlow是一个开源的Python库,旨在简化蛋白质结构数据在深度学习应用中的预处理过程。以下是其详细介绍: 功能 数据处理:支持处理单链和多链蛋白质结构,包括二级结构特征、扭转角等特征化选项。 数据获取:能够从Protein Data Bank (PDB)和Structural Antibody Databa…

WebPages 对象

WebPages 对象 引言 在Web开发领域&#xff0c;WebPages 对象是前端工程师和开发者常用的工具之一。它提供了丰富的API&#xff0c;使我们能够轻松地与网页元素进行交互。本文将深入探讨WebPages对象的概念、特性以及在实际开发中的应用。 概念 WebPages对象是现代浏览器提…

Mysql表的操作(2)

1.去重 select distinct 列名 from 表名 2.查询时排序 select 列名 from 表名 order by 列名 asc/desc; 不影响数据库里面的数据 错误样例 &#xff1a; 但结果却有点出乎意料了~为什么会失败呢&#xff1f; 其实这是因为书写的形式不对&#xff0c;如果带了引号&#xff0c;…

先占个日常,等会写。

引入一个重要的概念 “struct” &#xff08;译为中文&#xff1a;结构体&#xff09; 可用作设出比较复杂的一些变量类型 语法 &#xff1a;struct point name { int x; int y; int z;} point 和 name是任意命名的名字&#xff0c;含义是&#xff0c;声明一个变量类型为st…

SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代码对应的权重文件:SmolDocling-256M-preview权重文件 一、摘要 以下是文章摘要的总结: SmolDocling 是一…

MySQL SQL Mode

SQL Mode 是 MySQL 中一个重要的系统变量&#xff0c;它决定了 MySQL 应遵循的 SQL 语法规则和数据验证规则。 什么是 SQL Mode SQL Mode 定义了 MySQL 应该支持的 SQL 语法以及执行数据验证的方式。通过设置不同的 SQL Mode&#xff0c;可以让 MySQL 在不同程度上兼容其他数据…

Java bs架构/反射

bs架构 规定的格式是要换行&#xff0c;而打印流天然换行 线程池可以直接处理thread&#xff0c;thread继承自runnable 在Java中&#xff0c;线程池的pool.execute()方法用于提交一个任务给线程池执行。这个方法接受一个Runnable对象作为参数。Runnable是一个函数式接口&…

C++手撕单链表及逆序打印

在学习数据结构的过程中&#xff0c;链表是一个非常重要的基础数据结构。今天&#xff0c;我们将通过C手动实现一个单链表&#xff0c;并添加一个逆序打印的功能&#xff0c;帮助大家更好地理解链表的实现和操作。 一、链表简介 链表是一种线性数据结构&#xff0c;其中每个元…

netty中的ChannelPipeline详解

Netty中的ChannelPipeline是事件处理链的核心组件,负责将多个ChannelHandler组织成有序的责任链,实现网络事件(如数据读写、连接状态变化)的动态编排和传播。以下从核心机制、执行逻辑到应用场景进行详细解析: 1. 核心结构与组成 双向链表结构 组成单元:ChannelPipeline…

智能物联网网关策略部署

实训背景 某智慧工厂需部署物联网网关&#xff0c;实现以下工业级安全管控需求&#xff1a; 设备准入控制&#xff1a;仅允许注册MAC地址的传感器接入&#xff08;白名单&#xff1a;AA:BB:CC:DD:EE:FF&#xff09;。协议合规性&#xff1a;禁止非Modbus TCP&#xff08;端口…

前端-vue2核心

官网网址Vue2 安装 — Vue.js 搭建环境 第一种方式&#xff08;刚开是接触Vue&#xff09; 我们看官网&#xff0c;可以直接在script引入vue版本。这里有两个版本&#xff0c;开发版和生产版本。我们两个都下载。 然后创建一个项目&#xff0c;将下载的生产版本和开发版本粘…

【BUG】远程连接阿里云服务器上的redis报错

出现 Redis Client On Error: Error: connect ECONNREFUSED 47.100.XXX.XX:6379 错误&#xff0c;表明 Redis 客户端无法连接到指定的 Redis 服务器&#xff0c;可按以下步骤排查解决&#xff1a; 1. 检查 Redis 服务器是否运行 操作&#xff1a;在 Redis 服务器所在终端执行…

mongodb--用户管理

文章目录 MongoDB 用户管理1. 连接到 MongoDB2. 用户创建2.1 创建管理员用户2.2 创建特定数据库用户2.3 常用内置角色 3. 用户管理操作3.1 查看所有用户3.2 查看特定用户信息3.3 更新用户密码3.4 添加用户角色3.5 移除用户角色3.6 删除用户 4. 权限修改4.1 创建自定义角色4.2 将…

DeepSeek与搜索引擎:AI生成内容如何突破“语义天花板”

一、搜索引擎的“内容饥饿症”与AI的“产能悖论” 2024年&#xff0c;全球每天新增470万篇网络文章&#xff0c;但搜索引擎的索引拒绝率高达68%。这一矛盾的根源在于&#xff1a;算法对“高质量原创”的定义已从“形式独特性”转向“认知增值性”。传统AI生成内容&#xff08;…

YOLO目标检测应用——基于 YOLOv8目标检测和 SAM 零样本分割实现指定目标分割

概述 在当前的计算机视觉领域&#xff0c;目标分割技术正变得越来越重要。市面上有许多分割模型&#xff0c;它们的工作原理大致相似&#xff0c;通常包括收集数据、配置模型以及训练分割模型等步骤。最终目标是实现精确的目标分割。而随着 SAM&#xff08;Segment Anything M…

在Flutter中使用BottomNavigationBar和IndexedStack可以实现一个功能完整的底部导航栏

在Flutter中&#xff0c;使用BottomNavigationBar和IndexedStack可以实现一个功能完整的底部导航栏。BottomNavigationBar用于显示底部的导航按钮&#xff0c;而IndexedStack则用于管理页面的切换&#xff0c;确保每个页面的状态得以保留&#xff08;即页面不会因为切换而重新构…

【10】数据结构的矩阵与广义表篇章

目录标题 二维以上矩阵矩阵存储方式行序优先存储列序优先存储 特殊矩阵对称矩阵稀疏矩阵三元组方式存储稀疏矩阵的实现三元组初始化稀疏矩阵的初始化稀疏矩阵的创建展示当前稀疏矩阵稀疏矩阵的转置 三元组稀疏矩阵的调试与总代码十字链表方式存储稀疏矩阵的实现十字链表数据标签…

微服务篇——SpringCloud

服务注册 Spring Cloud5大组件有哪些&#xff1f; 服务注册和发现是什么意思&#xff1f;Spring Cloud如何实现服务注册发现&#xff1f; nacos与eureka的区别 负载均衡 如何实现负载均衡&#xff1f; Ribbon负载均衡的策略有哪些&#xff1f; 如何自定义负载均衡的策略&…

【小沐杂货铺】基于Three.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react,提供全部源代码)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…