QT----文件的读取,写入,保存;二进制、配置文件的读写

1.文件的读取与显示

(关于使用到的函数,大家可以在帮助手册里面查看)

Question

点击(信号)文件按钮(被观察者),显示文件列表,打开某一个文件),显示文件名到控件Filename中(文件对话框);然后显示文件内容(槽函数)到Filetext控件中(被观察者)

思路

  1. 设置点击文件按钮,显示文件名和内容的QTextEdit控件。
  2. 设置文件对话框(QT内置对话框),获取文件名
  3. 读取文件,显示文件内容到窗口

实现

方式1

在这里插入图片描述
在这里插入图片描述

#include "Csdnmainwindow.h"
#include "ui_Csdnmainwindow.h"

#include <QFileDialog>


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

    connect(ui->FileButton,&QPushButton::clicked,this,&CSDNMainWindow::OnFilebtnClick);

}

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

void CSDNMainWindow::OnFilebtnClick()
{
    //文件对话框,上次演示过
    QString filename = QFileDialog::getOpenFileName(this,"打开文本文件","F:/","");
 //拿到文件名
    ui->Filename->setText(filename);
  //读取文件
    QFile file(filename);//构建文件对象,对文件做相关操作
    bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
    if(!tag)
    {
        return;//文件打开失败
    }

    //按行读取文件
    while(!file.atEnd())//读文件直到末尾
    {
         char str[1024] = {0};
         file.readLine(str,sizeof(str));
         ui->Filetext->append(str);
    }
    file.close();
}

方式2

ui接口不变,槽函数的实现方式变化了

在这里插入图片描述

void CSDNMainWindow::on_FileButton_clicked()
{
    QString filename = QFileDialog::getOpenFileName(this,"打开文本文件","F:/","");
  //拿到文件名
    ui->Filename->setText(filename);
  //读取文件
    QFile file(filename);//构建文件对象,对文件做相关操作
    bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
    if(!tag)
    {
        return;//文件打开失败
    }

    QByteArray array;//字符动态数字==字节数组

    //按行读取文件
    while(!file.atEnd())
    {
        array += file.readLine();//将所有内容存放到array中
    }
    ui->Filetext->setText(array);//自动转化



    file.close();
}

结果

在这里插入图片描述

2.文件的修改与保存

将上一过程打开的文件编辑修改之后,另存为一个新文件。
或者自己在编辑框输入文件内容来保存

思路

  1. 创建另存为按钮,转到槽,通过文件对话框设置文件默认路径与名(可修改)
  2. 写入文件内容即可

实现

ui界面

在这里插入图片描述
这里还是右击,选择转到槽

槽函数

void CSDNMainWindow::on_savefileButton_clicked()
{
    QString filename = QFileDialog::getSaveFileName(this, " 另存为 " , " F:/ Delete.txt","*.txt" );

    QFile file(filename);//创建文件对象
    bool tag = file.open(QIODevice::WriteOnly);//写内容到文件中

    if(!tag)
    {
        return;
    }

    QString text = ui->Filetext->toPlainText();//文本框中的内容
    file.write(text.toUtf8());//将text内容转化为字节数组

    file.close();
}

在这里插入图片描述
选择一个文件夹

结果

在这里插入图片描述

3.保存为二进制文件

和普通文件没有什么不同,只是多了一个流对象。

实现

ui界面

在这里插入图片描述

槽函数

//保存为二进制文件
void CSDNMainWindow::on_saveBintybutton_clicked()
{
    QString filename = QFileDialog::getSaveFileName(this, " 另存为二进制 " , " F:/ DeleteByte.bin","*.bin" );

    QString text = ui->Filetext->toPlainText();//获取文本框中的内容

    QFile file(filename);//创建文件对象
    bool tag = file.open(QIODevice::WriteOnly);//写内容到文件中

    if(!tag)
    {
        return;
    }

    //创建流对象
    QDataStream writeout(&file);//传入文件对象指针
    QString str = " 悟空 ? ";


    writeout << 12345 ;
    writeout <<  str ;


    file.close();
}

在这里插入图片描述

结果

保存成功

二进制文件的读

在这里插入图片描述

实现

void CSDNMainWindow::on_readByteButton_clicked()
{
    QString filename = QFileDialog::getOpenFileName(this, " 选择二进制文件 " , " F:/ " , " *.bin *.txt" );

  //读取文件
    QFile file(filename);//构建文件对象,对文件做相关操作
    bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
    if(!tag)
    {
        return;//文件打开失败
    }

    //创建数据流对象
    QDataStream writein(&file);
    int num;
    QString str;

    writein >> num;
    writein >> str;

    qDebug() << num;
    qDebug() <<str;
    
    file.close();
}

END!

  • 5
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值