前言
看了网上很多文章,发现并没有详细和直观讲解QTextStream如何进行读写文件操作的教程,在自己探索后,出一个教程讲解如何进行文件读写。
*注:本文是最基本的QT利用QTextStream进行文件读写操作的教程,更多详细操作请参见相关书籍教程
搭建的UI如下,包含两个按钮和一个文本框。
预备知识
1、对文件操作时QIODevice的用法
值 | 描述 |
---|---|
QIODevice::NotOpen | 未打开 |
QIODevice::ReadOnly | 以只读方式打开 |
QIODevice::WriteOnly | 以只写方式打开 |
QIODevice::ReadWrite | 以读写方式打开 |
QIODevice::Append | 以追加的方式打开,新增加的内容将被追加到文件末尾 |
QIODevice::Truncate | 以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。 |
QIODevice::Text | 在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n |
QIODevice::Unbuffered | 忽略缓存 |
可参见:https://blog.csdn.net/iXiaochu/article/details/97753996
2、QTextStream相关的函数
值 | 描述 |
---|---|
qSetFieldWidth(int width) | 设置字段宽度 |
qSetPadChar(QChar ch) | 设置填充字符 |
qSetRealNumberPercision(int precision | 设置实数精度 |
操作步骤——写文件
1、首先需要包含头文件
#include <QFile>
#include <QTextStream>
2、编写一个函数进行写文件操作(或直接写在主函数中)
void MainWindow::WriteData()
{
QFile file; //定义一个文件对象
file.setFileName("e:/data.txt"); //设定文档名和存放路径
if(file.open(QIODevice::WriteOnly)) //打开文档,方式只读
{
QTextStream out(&file); //定义一个与文件关联的数据流“out”用于写操作
out << QString("123123123")+'\n'; //打印文档内容到文档
out << QString("华为技术有限公司");
}
file.close(); //关闭文件
}
一个最简单的QTextStream写文件就写好了
效果图
点击写文件
写好的文件就在目标文件中了
打开目标文件,刚刚写入的文字呈现在文档中。
实现步骤——读文件
注:不推荐这种读文件方式,会有一些不可预见的问题,可使用ReadAll读入
1、首先需要包含头文件(同上)
#include <QFile>
#include <QTextStream>
2、编写一个函数进行读文件操作(或直接写在主函数中)
void MainWindow::readData()
{
QFile file; //定义一个文件对象
file.setFileName("e:/data.txt"); //设定文档名和读取路径
if(file.open(QIODevice::ReadOnly)) //打开文档,方式只写
{
QTextStream cout(&file); //定义一个与文件关联的数据流“cout”用于读操作
QString str1,str2; //定义字符串变量
cout >> str1 >> str2; //读取数据到变量
ui->textEdit->setText(str1 + str2); //将字符串显示在在textEdit上
}
file.close();
}
效果图
点击读文件按钮,打开刚刚写好的文件内容
结束语
由于本文是按照函数的方式定义的两个读写函数,所以需要在主函数中连接两个按钮和函数之间进行调用。
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(WriteData()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(readData()));