【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();
}
相关推荐
九转成圣4 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio4 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython4 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫4 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch4 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI4 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0014 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript
念2344 小时前
f5 shape分析
开发语言·javascript·ecmascript
苍穹之跃4 小时前
某量JS逆向
开发语言·javascript·ecmascript
思茂信息4 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求