网站首页 > 博客文章 正文
文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能。
文本文件是指以纯文本格式存储的文件,例如用Qt Creator编写的C++程序的头文件(.h文件)和源程序文件(.cpp文件),HTML和XML文件也是纯文本文件,只是其读取之后需要对内容进行解析之后再显示。
Qt提供了两种读写纯文本文件的基本方法,一种是用QFile类的IODevice读写功能直接进行读写,另—种是利用QFile和QTextStream结合起来,用流(stream)的方法进行文件读写。
本文以实例的方式演示了利用QFile直接读写文本文件,其运行时窗口如下图所示。实例不仅演示了如何打开文本文件,还有文件保存功能。
QFiIe读取文本文件
QFile类是直接与IO设备打交道,进行文件读写操作的类,使用QFile可以直接打开或保存文本文件。工具栏上的“QFile打开”按钮用QFile类的功能直接打开文本文件,按钮的槽函数及相关函数的代码如下:
void MainWindow::on_actionOpen_triggered()
{ //打开文件
QString curPath=QDir::currentPath();
QString dlgTitle="打开一个文件";
QString filter="程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
openTextByIODevice(aFileName);
}
bool MainWindow::openTextByIODevice(const QString &aFileName)
{//用IODevice方式打开文本文件
QFile aFile(aFileName);
if(!aFile.exists())//文件不存在
return false;
if(!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
ui->textEditDevice->setPlainText(aFile.readAll());
aFile.close();
return true;
}
自定义函数openTextByIODevice()实现文本文件打开的功能。定义QFile对象变量aFile时将 文件名传递给它,检查文件存在后,通过open()函数打开文件。
QFile::open()函数打开文件时需要传递QIODevice::OpenModeFlag枚举类型的参数,决定文 件以什么方式打开,QIODevice::OpenModeFlag类型的主要取值如下。
- QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。
- QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。
- QIODevice::ReadWrite:以读写方式打开。
- QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。
- QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。
- QIODevice::Text:以文本方式打幵文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如Windows平台下是“\r\n”。
这些取值可以组合,例如QIODevice::ReadOnly | QIODevice::Text表示以只读和文本方式打 开文件。
将文件内容全部读出并设置为QPlainTextEdit组件的内容只需一条语句:
ui->textEditDevice->setPlainText(aFile.readAll());
文件内容读取结束后,需要调用QFile::close()函数关闭文件。
QFile保存文本文件
工具栏上的“QFile另存”按钮用QFile类的功能将QPlaintextEdit组件中的文本保存为一个文本文件,实现代码如下:
void MainWindow::on_actionSave_triggered()
{
QString curPath=QDir::currentPath();
QString dlgTitle="另存为一个文件";
QString filter=".h文件(*.h);;C++文件(*.cpp);;所有文件(*.*)";
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
saveTextByIODevice(aFileName);
}
bool MainWindow::saveTextByIODevice(const QString &aFileName)
{ //用IODevice方式保存文本文件
QFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
return false;
QString str=ui->textEditDevice->toPlainText();//整个内容作为字符串
QByteArray strBytes=str.toUtf8();//转换为字节数组
aFile.write(strBytes,strBytes.length()); //写入文件
aFile.close();
return true;
}
自定义函数saveTextBylODevice()实现文件保存功能,为了保存文件,用open()打开文件时, 使用的模式是 QIODevice::WriteOnly | QIODevice::Text。使用 WriteOnly 隐含着 Truncate,即删除文件原有内容。
首先将QPlaintextEdit组件textEditDevice的文本导出为一个字符串,将QString类的toUtf8() 函数转换为UTF8编码的字节数组strBytes,然后调用QFile::write()函数将字节数组内容写入文件。
- 上一篇: QT小技巧(qt快速入门教程)
- 下一篇: 第5篇 基础(五)Qt布局管理器(qt常用的布局管理器)
猜你喜欢
- 2024-09-08 Qt 贪吃蛇制作(含源码)(qt编写贪吃蛇)
- 2024-09-08 qt 提示“启动程序失败,路径或者权限错误?”解决方法
- 2024-09-08 电脑文件不小心删除了怎么办?两个方法教你秒恢复
- 2024-09-08 Qt——内存回收(qti内存)
- 2024-09-08 C++跨平台库QT学习 操作Excel(跨平台c++开发工具)
- 2024-09-08 Qt 工程 pro文件(qt工程文件.pro在哪儿找)
- 2024-09-08 Qt中的快捷键汇总(qtcreator快捷键)
- 2024-09-08 Qt中文乱码解决思路(vscode终端中文乱码怎么解决)
- 2024-09-08 Qt5+VS2015编程实例:下拉列表框QComboBox控件使用
- 2024-09-08 Qt编程进阶(87):基于HTTP协议的网络文件下载
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)