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


__EOF__

本文作者echo_lovely
本文链接https://www.cnblogs.com/echo-lovely/p/17222232.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   echo_lovely  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-03-16 C# 自定义时间进度条
点击右上角即可分享
微信分享提示