「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中的详细介绍

一、引言

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

二、使用范围

QTextStream广泛应用于以下场景:

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

三、类的头文件

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

cpp 复制代码
#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:

cpp 复制代码
QTextStream out(stdout);
out << "Hello, World!" << 123 << 45.67;

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

cpp 复制代码
QTextStream in(stdin);
QString str;
int num;
in >> str >> num;

十、详细代码举例

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

cpp 复制代码
#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在文件读写方面的基本用法。


相关推荐
云空17 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
青莳吖28 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall35 分钟前
期末考学C
java·开发语言
重生之绝世牛码37 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行43 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm15761 小时前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明1 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
Monly211 小时前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu1 小时前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee20211 小时前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频