QTextStream QFile 实时输出到文件

时间:2023-01-20 14:31:28

    在对文件操作的时候,我们都知道QFile,那么QTextStream是干嘛用的呢?查询帮助文档我们可以知道,QTextStream 提供了一个快捷的接口来读写文件,可以提供相当多的格式,对齐方式。

那么怎么使用呢?比如说我们要实现下面的功能,点击“写入”就将上面的文字写入文件,点击“关闭”就将文件关闭,禁止写入。

QTextStream QFile 实时输出到文件


来看头文件.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtWidgets>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_inputBtn_clicked();

    void on_clostBtn_clicked();

private:
    Ui::MainWindow *ui;

    QFile       *m_file;
    QTextStream *m_stream;

    void init();
};

#endif // MAINWINDOW_H

看.cpp,重点看注释,重点都我都写在注释里了。

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_file = nullptr;
    m_stream = nullptr;

    init();
}

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

void MainWindow::on_inputBtn_clicked()
{
    QString str = ui->plainTextEdit->toPlainText(); //去读界面上输入的文字

    if(m_stream != nullptr)
    {
        *m_stream << str << "\r\n";       // 将数据写入到数据流中,注意是带*
        m_stream->flush();                //将数据流中的数据写到文件,如果没有这一步,就不会马上写入到文件中。有了这一步就不用每次都打开与关闭文件了
    }
}

void MainWindow::init()
{
    QString filePath = qApp->applicationDirPath() + "/log.txt";

    m_file = new QFile(filePath);
    m_stream = new QTextStream(m_file); //用法

    m_file->open(QIODevice::WriteOnly | QIODevice::Append); //只写 与 添加 打开

}

void MainWindow::on_clostBtn_clicked()
{
    if(m_file != nullptr)
    {

        m_file->close();
        delete m_file;
        m_file = nullptr;
    }

    if(m_stream != nullptr)
    {
        delete m_stream;
        m_stream = nullptr;
    }


}

上面的demo可以下载:demo下载