首页 > 其他分享 >QT5笔记: 29. 文本文件读写

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

时间:2023-03-16 13:46:47浏览次数:40  
标签:QT5 文本文件 basePath 29 fileName ui QString file MainWindow

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

标签:QT5,文本文件,basePath,29,fileName,ui,QString,file,MainWindow
From: https://www.cnblogs.com/echo-lovely/p/17222232.html

相关文章

  • QT5笔记: 30. 二进制文件读写
    Qt预定义类型文件*.stm标准二进制文件*.dat例子:MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QItemSelectionModel>#include<QMainWin......
  • QT5笔记:27. MDI应用程序设计
    MDI:MultipleDocumentInterface多窗口文档界面例子:MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QMdiSubWindow>......
  • QT5笔记: 21. QStandardItemModel
    QStandardItemModel存放数据QItemSelectionModel选择项模型例子:本例子中QListView没有做任何处理,只是拖放至ui文件,设置了布局mainwindow.h#ifndefMAINWINDOW_H#......
  • QT5笔记: 22. 自定义代理
    代理作用:在界面发生编辑时可以指定编辑所用的组件,可以沟通Model和View自定义代理需要继承的基类和需要实现的方法使用步骤:继承QStyledItemDelegate,实现上面的四个......
  • day 29
    力扣题目链接(opensnewwindow)给定一个整型数组,你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入:[4,6,7,7]输出:[[4,6],[4,7],......
  • QT5笔记:18 QPainter基本绘图 完结撒花,感谢陪伴!!!
    代码#include"widget.h"#include"ui_widget.h"#include<QPainter>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){......
  • QT5笔记: 16. 时间和定时器的常用功能
    例子#ifndefWIDGET_H#defineWIDGET_H#include<QTime>#include<QTimer>#include<QWidget>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAM......
  • QT5笔记:10. 容器类的迭代
    1.这里指的是Java类型的迭代器,即使用方式和Java中一致代器的使用例子(适用于可读可写迭代器)QList<QString>list;//声明容器类list<<"A"<<"B"<<"C"<<"D";//......
  • QT5笔记:12. 字符串和数值之间的转换
    字符串与进制转换的例子/***@briefWidget::on_btnCalcHex_clicked从界面上获取十六进制字符串,然后转为十进制和二进制字符串写回界面*/voidWidget::on_btnCal......
  • QT5笔记:7. 自定义类、自定义信号及类的元对象信息
    自定义的QPerson类,需要继承QObject类qperson.h头文件#ifndefQPERSON_H#defineQPERSON_H#include<QObject>classQPerson:publicQObject{Q_OBJECT......