【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();
}
相关推荐
奶香臭豆腐1 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀9 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun9 分钟前
C语言初阶习题【9】数9的个数
c语言·开发语言
波音彬要多做43 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区1 小时前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光1 小时前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
矛取矛求1 小时前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生1 小时前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
是娜个二叉树!2 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python