「QT」文件类 之 QTextStream 文本流类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「QT」QT5程序设计
📚全部专栏
「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合
「C/C++」C/C++程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制开发
「Py」Python程序设计「Math」探秘数学世界「PK」Parasolid函数说明

目录

    • QTextStream类在Qt 5.15中的详细介绍
      • 一、引言
      • 二、使用范围
      • 三、类的头文件
      • 四、类的注意事项
      • 五、类的继承
      • 六、类的构造介绍
      • 七、公有函数介绍
      • 八、Static函数介绍
      • 九、运算符重载
      • 十、详细代码举例

QTextStream类在Qt 5.15中的详细介绍

一、引言

QTextStream是Qt框架中的一个类,它提供了基于文本的输入输出流接口。与QDataStream不同,QTextStream主要处理的是文本数据,包括字符、字符串、数字以及常见的文本格式(如行结束符、空格等)。QTextStream可以与多种Qt的I/O设备(如文件、内存缓冲区、网络连接等)关联,使得文本数据的读写变得简单而高效。

二、使用范围

QTextStream广泛应用于以下场景:

  • 文件读写:将文本数据保存到文件中,或从文件中读取文本数据。
  • 网络通信:通过网络发送和接收文本数据,实现基于文本的协议通信。
  • 控制台输入输出:在控制台应用程序中,与用户进行文本交互。
  • 内存中的文本处理:在内存中处理文本数据,如字符串的拼接、格式化等。

三、类的头文件

QTextStream类的头文件是<QTextStream>。在使用QTextStream时,需要包含这个头文件。

#include <QTextStream>

四、类的注意事项

  1. 编码:QTextStream默认使用系统的本地编码来处理文本数据。如果需要与其他编码格式的系统进行交互,可以使用setCodec()setCodecName()函数来设置编码。
  2. 自动换行:QTextStream会自动处理行结束符。在写入文本时,使用\n作为换行符,QTextStream会根据目标设备的平台自动转换为相应的行结束符(如Windows上的\r\n,Unix/Linux上的\n)。
  3. 设备状态:在读写文本之前,应确保关联的I/O设备处于正确的状态(如已打开)。如果设备状态不正确,QTextStream的操作可能会失败。
  4. 错误处理:QTextStream提供了错误处理机制,可以通过atEnd()status()函数来检查流的状态,以便在发生错误时采取相应的措施。

五、类的继承

QTextStream是一个独立的类,不继承自其他Qt类。它提供了用于读写文本数据的接口,并与Qt的I/O设备系统紧密结合。

六、类的构造介绍

QTextStream有两个主要的构造函数,分别用于基于设备(如文件、缓冲区等)和基于字符串的流。

  • QTextStream(QIODevice *device):创建一个与指定设备关联的QTextStream对象。设备可以是文件、内存缓冲区、网络连接等。
  • QTextStream(QString *string, QIODevice::OpenMode mode = QIODevice::ReadWrite):创建一个与指定字符串关联的QTextStream对象。这种模式通常用于在内存中处理文本数据。

七、公有函数介绍

QTextStream提供了一系列公有函数来读写文本数据。以下是一些常用的公有函数:

  • *QIODevice device() const:返回与流关联的设备对象(如果有的话)。
  • void setDevice(QIODevice *device):设置与流关联的新设备对象。
  • bool atEnd() const:检查是否已到达流的末尾。
  • QStream::Status status() const:返回流的当前状态。
  • void setCodec(QTextCodec *codec):设置用于编码和解码文本的QTextCodec对象。
  • void setCodecName(const char *codecName):根据名称设置用于编码和解码文本的QTextCodec对象。
  • *QTextCodec codec() const:返回当前用于编码和解码文本的QTextCodec对象。
  • QString codecName() const:返回当前用于编码和解码文本的QTextCodec对象的名称。

此外,QTextStream还重载了<<>>运算符,用于写入和读取文本数据。

八、Static函数介绍

QTextStream没有提供静态函数。它的所有功能都通过对象实例的方法来实现。

九、运算符重载

QTextStream重载了<<(插入运算符)和>>(提取运算符),以便能够方便地将文本数据写入流和从流中读取文本数据。这些运算符对于基本数据类型(如intfloatQString等)以及常见的文本格式都是可用的。

例如,可以使用<<运算符将整数、浮点数、字符串等写入QTextStream:

QTextStream out(stdout);
out << "Hello, World!" << 123 << 45.67;

同样地,可以使用>>运算符从QTextStream中读取文本数据:

QTextStream in(stdin);
QString str;
int num;
in >> str >> num;

十、详细代码举例

以下是一个使用QTextStream的示例代码,用于演示如何将文本数据写入文件,并从文件中读取文本数据。

#include <QCoreApplication>
#include <QTextStream>
#include <QFile>
#include <QIODevice>
#include <QString>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 创建并打开一个文件用于写入QFile fileOut("output.txt");if (!fileOut.open(QIODevice::WriteOnly | QIODevice::Text)) {qWarning() << "Failed to open file for writing";return -1;}// 创建与文件关联的QTextStream对象用于写入QTextStream out(&fileOut);out << "This is a line of text.\n";out << "Another line with a number: " << 42 << ".\n";fileOut.close();// 打开同一个文件用于读取QFile fileIn("output.txt");if (!fileIn.open(QIODevice::ReadOnly | QIODevice::Text)) {qWarning() << "Failed to open file for reading";return -1;}// 创建与文件关联的QTextStream对象用于读取QTextStream in(&fileIn);QString line;while (!in.atEnd()) {line = in.readLine();qDebug() << line;}fileIn.close();return app.exec();
}

在这个示例中,我们首先创建了一个名为output.txt的文件,并使用QTextStream将两行文本写入该文件。然后,我们重新打开该文件以进行读取,并使用QTextStream逐行读取文本数据,最后将其打印到控制台。这个示例展示了QTextStream在文件读写方面的基本用法。


在这里插入图片描述

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

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

相关文章

mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因

原因&#xff1a;在MySQL8.0之后的版本&#xff0c;只允许在数据库初始化时指定&#xff0c;之后不允许修改了 mysql 配置文件 my.cnf 增加 lower_case_table_names 1 服务启动不了 报错信息&#xff1a;Job for mysqld.service failed because the control process exited …

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字&#xff1a; PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…

[Android]相关属性功能的裁剪

1.将home界面的search bar 移除 /src/com/android/launcher3/graphics/LauncherPreviewRenderer.java // Add first page QSBif (FeatureFlags.QSB_ON_FIRST_SCREEN) {CellLayout firstScreen mWorkspaceScreens.get(FIRST_SCREEN_ID);View qsb mHomeElementInflater.infla…

Git的概念、安装、操作与分支管理和图形化界面TortoiseGit(小乌龟 )的安装与使用

目录 一、Git 概述 简介 安装 使用场景 二、Git 操作详解 使用git管理文件版本 使用 Git 管理代码 三、分支操作 使用小乌龟操作分支 创建新的分支 两个分支合并 四、总结 在当今的软件开发和文档编写等领域&#xff0c;版本控制工具至关重要。Git 作为其中的佼佼者…

边缘计算在智能制造中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 边缘计算在智能制造中的应用 边缘计算在智能制造中的应用 边缘计算在智能制造中的应用 引言 边缘计算概述 定义与原理 发展历程 …

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言&#xff1a; 两个本想描述一样的意思的词&#xff0c;只因一字只差就让人觉得一个是好牛&#xff0c;一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中&#xff0c;但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…

使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本

作者&#xff1a;来自 Elastic Jonathan Simon 收集数据对于可观察性和安全性至关重要&#xff0c;而确保数据能够快速搜索且获得低延迟结果对于有效管理和保护应用程序和基础设施至关重要。但是&#xff0c;存储所有这些数据会产生持续的存储成本&#xff0c;这为节省成本创造…

Node.js事件循环:解锁异步编程的奥秘

Node.js的事件循环是实现高性能、异步编程的关键机制。了解Node.js事件循环的工作原理和使用方法对于开发高效的应用程序至关重要。本文将深入介绍Node.js事件循环的原理、阶段和最佳实践&#xff0c;帮助您充分利用这一强大功能。 Node.js事件循环概述 Node.js事件循环是Node…

Windows docker下载minio出现“Using default tag: latestError response from daemon”

Windows docker下载minio出现 Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded 此类情况&#xff0c;一般为镜像地址问题。 {"registry-mirrors": ["https://docker.re…

20241114软考架构-------软考案例16答案

每日打卡题案例16答案 16.【2017年真题】 难度&#xff1a;简单 阅读以下关于软件架构评估的叙述&#xff0c;在答题纸上回答问题1和问题2.(共25分) 【说明】 某单位为了建设健全的公路桥梁养护管理档案&#xff0c;拟开发一套公路桥梁在线管理系统。在系统的需求分析与架构设…

使用C语言进行信号处理:从理论到实践的全面指南

1. 引言 在现代操作系统中&#xff0c;信号是一种进程间通信机制&#xff0c;它允许操作系统或其他进程向一个进程发送消息。信号可以用来通知进程发生了一些重要事件&#xff0c;如用户请求终止进程、硬件异常、定时器超时等。掌握信号处理技术对于开发健壮、高效的系统程序至…

7天用Go从零实现分布式缓存GeeCache(学习)(2)

参考:https://geektutu.com/post/geecache-day2.html // Cache 是一个 LRU 缓存&#xff08;最近最少使用缓存&#xff09;&#xff0c;它不是并发安全的。 type Cache struct { maxBytes int64 // 缓存的最大字节数 nbytes int64 …

【微服务】Docker 容器化

一、初识Docker 1. 为什么需要 Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会遇到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性的问题开发、测试、生产环境有差异 Docker 如何解决依赖的兼容问题 将应用的Libs&#xff08;…

curl命令提交大json

有个客户需要提交一个4M左右的pdf&#xff0c;接口里传的是pdf字节流base64编码后的字符串。 直接curl -XPOST -d json串 api接口会报 参数过长报错Argument list too long 网上搜了下解决方案把json串放到文本里然后通过json.txt引入参数 这一试不要紧&#xff0c;差点儿导致…

websocket身份验证

websocket身份验证 前言 上一集我们就完成了websocket初始化的任务&#xff0c;那么我们完成这个内容之后就应该完成一个任务&#xff0c;当客户端与服务端连接成功之后&#xff0c;客户端应该主动发起一个身份认证的消息。 身份认证proto 我们看一眼proto文件的内容。 我…

Scala学习记录,case class,迭代器

case class case class创建的对象的属性是不可改的 创建对象&#xff0c;可以不用写new 自动重写&#xff1a;toString, equals, hashCode, copy 自动重写方法&#xff1a;toString,equals,hashCode,copy 小习一下 1.case class 的定义语法是什么 基本形式&#xff1a;case …

mysql中的EXISTS和NOT EXISTS使用详解

本文来编写一个实例说下mysql中的EXISTS和NOT EXISTS使用详解 文章目录 exists用法SQL中in, not in, exists, not exists的区别使用实例本文小结 exists用法 exists: 如果括号内子查询语句返回结果不为空&#xff0c;说明where条件成立&#xff0c;就会执行主SQL语句。如果括号…

HTB:Precious[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 使用curl访问靶机80端口 使用ffuf爆破一下子域 使用浏览器访问该域名 使用curl访问该域名响应头 使用exiftool工具查看该pdf信息 横向移动 USER_FLAG&#xff1a;adf5793a876a190f0c08b3b6247cec32…

【论文分享】三维景观格局如何影响城市居民的情绪

本次带来一篇SCI论文的全文翻译&#xff01;该论文以上海LivingLine项目为例&#xff0c;探索利用时空Wi-Fi数据分析街道层面的城市活力。 【论文题目】Understanding street-level urban vibrancy via spatial-temporal Wi-Fi data analytics: Case LivingLine Shanghai 【题…

大数据面试题--kafka夺命连环问(前15问)

目录 1、kafka消息发送的流程&#xff1f; 2、Kafka 的设计架构你知道吗 3、Kafka 分区的目的&#xff1f; 4、你知道 Kafka 是如何做到消息的有序性&#xff1f; 5、ISR、OSR、AR 是什么&#xff1f; 6、Kafka 在什么情况下会出现消息丢失&#xff1f; 7、怎么尽可能保…