QT5笔记: 29. 文本文件读写

image

例子:主要讲了 QFile 、QTextStream 进行文本文件读写

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_actOpen_IODevice_triggered();

    void on_actSave_IODevice_triggered();

    void on_actOpen_TextStream_triggered();

    void on_actSave_TextStream_triggered();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QFileDialog>
#include <QTextStream>

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

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

//文件方式打开文件
void MainWindow::on_actOpen_IODevice_triggered()
{
    QString basePath = QCoreApplication::applicationDirPath();//获取当前文件运行目录
    QString fileName = QFileDialog::getOpenFileName(this, "basePath", basePath, "文本文件(*.txt *.h *.cpp)");
    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {//打开文本文件
            ui->plainTextEdit->setPlainText(file.readAll());
            file.close();//关闭文件
            ui->tabWidget->setCurrentIndex(0);
        }
    }
}

//文件方式存文件
void MainWindow::on_actSave_IODevice_triggered()
{
    QString basePath = QCoreApplication::applicationDirPath();
    QString fileName = QFileDialog::getSaveFileName(this, "save", basePath, "文本文件(*.txt *.h *.cpp)");
    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
            QString text = ui->plainTextEdit->toPlainText();
            file.write(text.toUtf8());//toUtf8可以转换为byteArray
            file.close();
            ui->tabWidget->setCurrentIndex(0);
        }
    }
}

//流方式打开文件
void MainWindow::on_actOpen_TextStream_triggered()
{
    QString basePath = QCoreApplication::applicationDirPath();
    QString fileName = QFileDialog::getOpenFileName(this, "basePath", basePath, "文本文件(*.txt *.h *.cpp)");
    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {//打开文本文件
            QTextStream stream(&file);//流
            ui->plainTextEdit_2->clear();
            while (!stream.atEnd()) {//可以一行一行处理,也可以一次性读完文件
                QString line = stream.readLine();
                ui->plainTextEdit_2->appendPlainText(line);
            }
            file.close();
            ui->tabWidget->setCurrentIndex(1);
        }
    }
}

//流方式存文件
void MainWindow::on_actSave_TextStream_triggered()
{
    QString basePath = QCoreApplication::applicationDirPath();
    QString fileName = QFileDialog::getSaveFileName(this, "save", basePath, "文本文件(*.txt *.h *.cpp)");
    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
            QTextStream stream(&file);
            stream.setAutoDetectUnicode(true);//自动检测非ASCII字符,以正确方式存储/打开,QT 5.12.8没有这句话,我也没有发现有问题
            QString text = ui->plainTextEdit_2->toPlainText();
            stream << text;
            file.close();
            ui->tabWidget->setCurrentIndex(1);
        }
    }
}

界面:
image

posted @ 2023-03-16 13:34  echo_lovely  阅读(11)  评论(0编辑  收藏  举报