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

news2024/12/23 9:31:31

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「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.coloradmin.cn/o/2240698.html

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

相关文章

【go从零单排】JSON序列化和反序列化

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

网络学习第四篇

引言&#xff1a; 我们在第三篇的时候出现了错误&#xff0c;我们要就行排错&#xff0c;那么我们要知道一下怎么配置静态路由实现ping通&#xff0c;这样子我们才知道下一跳到底是什么&#xff0c;为什么这样子做。 实验目的 理解和掌握静态路由的基本概念和配置方法。 实…

蓝桥杯竞赛单片机组备赛【经验帖】

本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛&#xff0c;在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖&#xff0c;在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛&#xff0c;只要认真勤奋&#xff0c;拿个省二绝对没问…

yolo标签自动标注(使用python和yolo方法)

yolo代码自动标注 1.引言1.初阶“自动标注”&#xff0c;给每个图像都生成一个固定的标注文件&#xff0c;进而在labglimg中对矩形框进行微调&#xff0c;减少标注的工作量2.高阶自动标注&#xff0c;利用我们训练好的&#xff08;但是没有特别精准的&#xff09;yolo文件先对每…

Git在版本控制中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Git在版本控制中的应用 Git在版本控制中的应用 Git在版本控制中的应用 引言 Git 概述 定义与原理 发展历程 Git 的关键技术 分布…

vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录

文章目录 前言方案一&#xff08;借用插件转换&#xff09;启动命令&#xff0c;转换方案一转换遇到的问题 方案二&#xff08;手动调整&#xff09;方案两者对比小结 前言 vue cli 脚手架转成vite启动 简单说说这个项目的一些底层基本结构哈&#xff0c;以及写这篇博客的目的…

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像&#xff08;边界一般和颜色无关&#xff09;这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像&#xff0c;第二个是输出的图像这两个参数都是引用…

SpringBoot基础系列学习(七):整合Mybatis

文章目录 一丶介绍1.基本信息2.特性 二丶代码1.项目结构2.数据表3.引入依赖4.实体类5.mapper6.sql.xml7.Controller8.结果 一丶介绍 1.基本信息 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手…

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…

记一次谷歌chrome浏览器 18 以上和 18 以下,最小字号不一致,导致的样式兼容问题解决过程

**记录一次谷歌chrome浏览器 18 以上和 18 以下&#xff0c;最小字号不一致&#xff0c;导致的样式兼容问题解决过程&#xff1a;** 定位问题尝试解决方案第一时间想到的解决方案&#xff1a;方案一尝试方案二&#xff1a;scale 缩放方案三&#xff1a;rem、em测试 方案四 SVG最…

Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!

作者&#xff1a;来自 Elastic Platform Product Team Elastic Search AI 平台&#xff08;Elasticsearch、Kibana 和机器学习&#xff09;的 8.16 版本包含大量新功能&#xff0c;可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…

HarmonyOS Next星河版笔记--界面开发(5)

1.字符串 1.1.字符串拼接 作用&#xff1a;把两个或多个字符串&#xff0c;拼成一个字符串。&#xff08;通常是用来拼接字符串和变量&#xff09; hello world > helloworld 加好作用&#xff1a;拼接 let name:string 小明 console.log(简介信息,名字是 name) …

kafka中topic的数据抽取不到hdfs上问题解决

在上一个博客中有一个案例&#xff1a; 将json文件抽取到kafka的消息队列&#xff08;topic&#xff09;中&#xff0c;再从topic中将数据抽取到hdfs https://blog.csdn.net/qq_62984376/article/details/143759037?spm1001.2014.3001.5501 我们在从kafka中topic的数据抽到hdf…

scala中的case class

package test_27 //Set的特点&#xff1a;唯一&#xff08;元素不同&#xff09;&#xff1b;无序 //case class定义一组数据 case class Book(var bookName:String,var author:String,var price:Double){} object caseclass {def main(args: Array[String]): Unit {//定义一个…

【Excel】数据透视表分析方法大全

数据透视表的最常用的功能是分类汇总&#xff0c;其实它还有很强大的数据分析功能。在数据透视表右键菜单的值显示方式中&#xff0c;可以看到有14个很实用的分析选项。 1、总计的百分比 作用&#xff1a;透视表中每一个数字&#xff08;包括汇总行、总计行&#xff09;占右…

交互新体验:Axure动态面板下的图片拖动技巧

交互新体验&#xff1a;Axure动态面板下的图片拖动技巧 前言 在数字产品的设计过程中&#xff0c;用户体验的每一个细节都至关重要。 动态交互效果&#xff0c;如拖动按钮控制图片展示区域&#xff0c;不仅能够提升用户的参与度&#xff0c;还能增强界面的直观性和互动性。 …

批量将MySQL中的MyISAM引擎,改成InnoDB引擎

一、InnoDB和MyISAM的区别 MySQL中InnoDB和MyISAM是两种常用的存储引擎&#xff0c;具有以下不同的特点&#xff1a; 序号InnoDBMyISAM说明事务支持支持不支持InnoDB可以处理更复杂的业务逻辑&#xff0c;而MyISAM在处理大量并发写入时可能会遇到问题‌锁定机制行级锁定表级锁…

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成&#xff0c;且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串&#xff0c;对于其中的…

灵神 刷题DAY1

Python与java的刷题的区别 1. Python没有分号 2. Python不能return的时候赋值 3. Python没有小括号和花括号 4. Python的循环很奇怪&#xff0c;没有for(int i0;i<32;i)这种形式 而是直接用的是for i in range(n)这种 5. Python中没有 6. Python中没有&& 是an…

Servlet三小时速成

Servlet三小时速成 实例驱动的速成教程。自己敲一遍的话入门还是没问题的。如有错误请读着多多包涵。 Serlet的前辈&#xff1a;CGI 通用网关接口 CGI通过调用外部程序来处理HTTP请求&#xff0c;对于每个请求都会启动一个新的进程。 这就导致了许多问题&#xff0c;首先是…