【QT】文件读写,文件对话框

一.QFile类

QFile提供了从文件中读取和写入数据的能力。

我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。

QFile是QIODevice的子类,利用QFile可以对文件进行打开,读取,写入的操作。

可以使用QDataStream或QTextStream类来读写文件,也可以用QIODevice类自带的read()、readLine()、readAll()以及write()这样的函数。

获取一个文件的信息使用QFileInfo类。

二.读取文件/写入文件

1.直接使用其自带的读写函数read/write读取

cpp 复制代码
    // File类读取
    QFile file("C:\\Users\\SlanderMC\\Desktop\\111.txt");
    file.open(QIODevice::ReadOnly|QIODevice::Text);
    char text[5000];
    file.read(text,5000);
    qDebug()<<text;
    file.close();
    //File类创建写入
    QFile file2("C:\\Users\\SlanderMC\\Desktop\\222.txt");
    file2.open(QIODevice::WriteOnly|QIODevice::Text);
    file2.write("123456");
    file2.close();

打开函数open,内部参数指的是打开文件的方式

复制代码
QIODevice::NotOpen              未打开
QIODevice::ReadOnly             以只读方式打开
QIODevice::WriteOnly            以只写方式打开
QIODevice::ReadWrite            以读写方式打开
QIODevice::Append               以追加的方式打开,新增加的内容将被追加到文件末尾 
QIODevice::Truncate             以重写的方式打开,在写入新的数据时会将原有
 QIODevice::Truncate            以重写的方式打开,在写入新的数据时会将原有      数据全部                                                   清除,游标设置在文件开头。
QIODevice::Text                 在读取时,将行结束符转换成 \n;在写入时, 将行结束符转换成本地格式,例如 Win32 平台上是 \r\n
QIODevice::Unbuffered 忽略缓存

2.使用QTextStream类写入和读取文件

读入可以使用readline逐行读入,也可以使用read设置大小读入

写入时,可直接使用<<重载运算符

cpp 复制代码
   //通过QTextStream读写文件
    QFile file("C:\\Users\\SlanderMC\\Desktop\\111.txt")    ;
    file.open(QIODevice::ReadWrite|QIODevice::Text);
    QTextStream stream(&file);
    //读
    stream.setEncoding(QStringConverter::Utf8);
    // QString s = stream.read(file.size());
    //  qDebug()<<s;
    while(!stream.atEnd())
    {
        QString s = stream.readLine();
        qDebug()<<s;
    }
   //写
    stream<<"1111111";

三.QT中文件对话框QFileDialog

QFileDialog::getOpenFileName(parent,"对话框名称","默认打开文件夹","文件类型");

返回值:QString 返回选择的文件名称filename

示例:

cpp 复制代码
QString filename = QFileDialog::getOpenFileName
(this,"文件选择","C:\\Users\\SlanderMC\\Desktop",tr("Text (*.txt *.doc)"));

四.自定义记事本,实现文件读取,文件保存

为按钮设置信号槽,左一按钮为打开文件,左二按钮为保存文件。

利用QFileDialog选择文件,再利用QFile类打开文件,最后使用QTextStream读取和写入文件。实现功能。

cpp 复制代码
void Widget::on_btnopen_clicked()
{
    //文件内容显示到编辑栏中
    QString filename = QFileDialog::getOpenFileName(this,"open","C:\\Users\\SlanderMC\\Desktop");
    QFile file(filename);
    file.open(QIODevice::ReadOnly|QIODevice::Text);
    QTextStream stream(&file);
    stream.setEncoding(QStringConverter::Utf8);
    QString str = stream.readAll();
    ui->textEdit->setText(str);
    file.close();
}


void Widget::on_btnsave_clicked()
{
    //编辑后的内容保存到文件
    QString strsave = QFileDialog::getSaveFileName(this,"保存文件","C:\\Users\\SlanderMC\\Desktop");
    QFile file(strsave);
    file.open(QIODevice::WriteOnly|QIODevice::Text);
    QTextStream stream(&file);
    stream<<ui->textEdit->toPlainText();
    file.close();
}
相关推荐
LDR00619 分钟前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术22 分钟前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园32 分钟前
C++20 Modules 模块详解
java·开发语言·spring
swordbob1 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享2 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.2 小时前
C语言--day30
c语言·开发语言
何以解忧,唯有..2 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽2 小时前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下2 小时前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1112 小时前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言