Qt QTextStream

上一节我们介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。

QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。
QTextStream同QDataStream的使用基本一致。

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

    void writeData();
    void readData();

private:
    Ui::MyWidget *ui;
};
#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"
#include<QTextStream>
#include<QFile>
#include<QDebug>
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    this->writeData();

    this->readData();
}

MyWidget::~MyWidget()
{
    delete ui;
}
void MyWidget::writeData()
{
    QFile file;
    file.setFileName("../09_QTextStream/demo.txt");
    bool isOK=file.open(QIODevice::WriteOnly);
    if(true==isOK)
    {
        QTextStream stream(&file);

        //指定编码方式
        stream.setCodec("UTF-8");
        stream<<QString("啦啦啦啦")<<666;
        file.close();

    }

}
void MyWidget::readData()
{
    QFile file;
    file.setFileName("../09_QTextStream/demo.txt");
    bool isOK=file.open(QIODevice::ReadOnly);
    if(true==isOK)
    {
        QTextStream stream(&file);

        //指定编码方式
        stream.setCodec("UTF-8");
        QString str;
        int a;
        stream>>str>>a;
        qDebug()<<str.toUtf8().data()<<a;
        file.close();

    }
}


结果:
在这里插入图片描述
发现结果a并不是想象中的666,而是0.
原因分析:
为当使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而以QTextStream写入数据,是没有数据之间的分隔的。

因此,使用QTextStream时,很少会将其分割开来读取,而是使用诸如使用:
QTextStream::readLine() 读取一行
QTextStream::readAll()读取所有文本
这种函数之后再对获得的QString对象进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值