Qt5基础 QTextStream读写文本文件

Qt5基础系列

Qt基础的学习笔记。此文章为在B站上学习黑马程序员Qt教程的QTextStream操作文件部分做的记录,加深理解,方便回看。

一、简介

QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。

二、代码示例

1、头文件

主要定义了两个共有函数writeData();readData();还有一个按钮事件。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    void writeData();
    void readData();
private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

2、引入类

#include "widget.h"
#include "ui_widget.h"
#include <QTextStream>
#include <QFile>
#include <QDebug>
#include <QFileDialog>

3、主程序

#define cout qDebug()<< "["<<__FILE__<<":"<<__LINE__<<"]"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    writeData();
    readData();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::writeData()
{
    QFile file;
    file.setFileName("../demo.txt");

    bool isOk = file.open(QIODevice::WriteOnly);
    if(true == isOk)
    {
        QTextStream stream(&file);

        //指定编码
        //stream.setCodec("UTF-8");
        stream << QString("气质达人!")<<250;

        file.close();

    }
}

void Widget::readData()
{
    QFile file;
    file.setFileName("../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;

        cout<<str<<a;
        file.close();

    }
}

在使用QDataStream的时候,stream >>str >> a读取内容很方便,但是使用了QTextStream时却有所不同:读出的时候,以文本形式写入数据,是没有数据之间的分隔的,它会将整个内容视为一个字符串。整型部分则输出0。

在这里插入图片描述
因此,使用文本文件时,很少会将其分割开来读取。同时,我们使用一个按钮事件结合对数据流的readAll方法来读取文本内容。

void Widget::on_pushButton_clicked()
{
    QString path = QFileDialog::getOpenFileName(this,
                                                "open","../");
    if(false == path.isEmpty()){
        QFile file;
        file.setFileName(path);

        bool isOk = file.open(QIODevice::ReadOnly);
        if(true == isOk)
        {
            QTextStream stream(&file);

            //指定编码
            stream.setCodec("UTF-8");
            QString str = stream.readAll();
            ui->textEdit->setText(str);
        }
        file.close();
    }
}

4、结果截图

在这里插入图片描述

三、总结

以上就是QTextStream的内容了。值得注意的是,读文件如果指定了编码UTF-8则只能读取对应UTF-8格式的txt文件。如果文件是ANSI之类的格式,则不需要指定编码。同样写文件,如果指定编码是UTF-8则输出也是相应格式的文件,否则输出是ANSI格式的文件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂java杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值