知识点

  1. QFile读写文件
  2. QFileInfo获取文件信息
  3. QDataStream读写文件
  4. QTextStream读写文件
  5. 内存文件QBuffer读写文件

结果演示

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_ReadButton_clicked();void on_WriteButton_clicked();//通过文件流读写文件void writeDate();void readDate();//第三种方式通过QTextStream读写文件void writeDateTextStre();void readDateTextStre();//第四种方式通过内存文件QBuffer读写文件void WriteReadBuffer();private:Ui::Widget *ui;};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QFile>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>
#include <QDataStream>
#include <QTextStream>
#include <QBuffer>//内存文件#define cout qDebug() << "[" << __FILE__ <<":" << __LINE__ << "]"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//第二种方式通过QDataStream读写文件writeDate();readDate();//第三种方式通过QTextStream读写文件writeDateTextStre();readDateTextStre();//第四种方式通过内存文件QBuffer读写文件WriteReadBuffer();
}Widget::~Widget()
{delete ui;
}void Widget::on_ReadButton_clicked()
{QString path=QFileDialog::getOpenFileName(this, tr("Open File"),"../",tr("Text files (*.txt);;Images (*.png *.xpm *.jpg)"));//路径打开了if(!path.isEmpty()){//文件对象QFile file(path);bool openOk=file.open(QIODevice::ReadOnly);if(openOk){#if 0//读文件,默认只识别utf8编码QByteArray array=file.readAll();//显示到编辑区ui->textEdit->setText(array);
#endifQByteArray array;while(!file.atEnd()){//读一行array+=file.readLine();}ui->textEdit->setText(array);}file.close();}//QFileInfo获取文件信息QFileInfo FileDate(path);qDebug()<<FileDate.exists();if(FileDate.exists()){qDebug() << "文件名字:" <<FileDate.fileName();qDebug() << "文件大小:" << FileDate.size()<<"bit";qDebug() << "文件创建时间:" <<FileDate.created().toString("yyyy-MM-dd hh:mm:ss");}
}void Widget::on_WriteButton_clicked()
{QString path=QFileDialog::getSaveFileName(this, tr("Save File"),"../",tr("Text files (*.txt);;Images (*.png *.xpm *.jpg)"));//成功了if(!path.isEmpty()){//文件对象QFile file(path);//打开文件,只写方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//获取编辑区内容QString str=ui->textEdit->toPlainText();//显示中文,转为uft8QByteArray strArray=str.toUtf8();file.write(str.toUtf8());}file.close();}}//通过文件流读写文件
void Widget::writeDate(){QString path("../dateTxt.txt");//qDebug()<<path;//创建文件对象QFile file(path);//打开文件,只写方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//创建数据流,和file文件关联//往数据流中写数据,相当于往文件里写数据QDataStream stream(&file);stream<<QString("QDataStream 今年年龄:")<<26;file.close();}
}void Widget::readDate(){QString path("../dateTxt.txt");//qDebug()<<path;//创建文件对象QFile file(path);//打开文件,只写方式bool openOk=file.open(QIODevice::ReadOnly);if(openOk){//创建数据流,和file文件关联//往数据流中读数据,相当于往文件里读数据QDataStream stream(&file);//读的时候,按写的顺序取数据QString str;int a;stream>>str>>a;//qDebug() << str.toUtf8().data() << a;cout << str.toUtf8().data() << a;file.close();}
}//第三种方式通过QTextStream读写文件
void Widget::writeDateTextStre(){QString path("../DemoTxt.txt");//qDebug()<<path;//创建文件对象QFile file(path);//打开文件,只写方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//创建数据流,和file文件关联//往数据流中写数据,相当于往文件里写数据QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");stream<<QString("QTextStream 今年年龄:")<<26;file.close();}}/*使用readData()函数的话,能够输出结果,只是输出的结果中会多出一个0;* 这是因为利用这种办法它并不能判断字符串的结尾,所以就将str和a当成一个字符串了,到后面要输出a的时候,* 里面已经没有内容了,于是就输出了0;* 这也说明使用这种方式读内容的话,并不安全,* 所以应该采用readall、readline的方式
*/
void Widget::readDateTextStre(){QString path("../DemoTxt.txt");//qDebug()<<path;//创建文件对象QFile file(path);//打开文件,只写方式bool openOk=file.open(QIODevice::ReadOnly);if(openOk){//创建数据流,和file文件关联//往数据流中写数据,相当于往文件里写数据QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");//        QString str01=stream.readAll();
//        cout<<str01;QByteArray str;while(!file.atEnd()){str+=file.readLine();}cout<<str;file.close();}
}//第四种方式通过内存文件QBuffer读写文件
void Widget::WriteReadBuffer(){//QBuffer写文件QBuffer merbuffer;merbuffer.open(QIODevice::WriteOnly);QDataStream stream(&merbuffer);stream<<QString("QBuffer 今年年龄:")<<26;merbuffer.close();//cout<<merbuffer.buffer();merbuffer.open(QIODevice::ReadOnly);QDataStream streamOut(&merbuffer);//读的时候,按写的顺序取数据QString str;int a;streamOut>>str>>a;//qDebug() << str.toUtf8().data() << a;cout << str.toUtf8().data() << a;merbuffer.close();
}

Qt学习(四):qt读写文件相关推荐

  1. Qt学习(四)---实例涂鸦画板mspaint

    Qt学习(四)-实例涂鸦画板mspaint 一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二 ...

  2. Qt学习之Qt基础入门(下)

    1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...

  3. Qt学习之Qt基础入门(中)

    1. 前言 上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法 Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门( ...

  4. Qt学习(十三)—— 文件读写

    目录 文件系统结构图 QFile读文件 QFile写文件 QFileInfo获取文件信息 QDataStream读写文件 QTextStream操作文件 QBuffer 文件的读写应用场景十分广泛,也 ...

  5. QT学习:Qt对Office的基本读写

    Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的 单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能 ...

  6. 嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

    想要把qt工程放到开发板上运行,就需要用到交叉编译.由于qt是跨平台的,所以只需要换个编译器编译一下就可以. 以qt学习–计时器的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时 ...

  7. python 文本换行_Python学习入门(23)—读写文件

    (本号正在连续推出以Python官网文档为主线的系统学习Python的系列文章或视频,感兴趣的朋友们欢迎搜索关注.在这里学习Python事半功倍!本文及后续文章如无特别声明均以Windows平台作为演 ...

  8. Qt 学习(三) —— Qt 模块

    1. Qt 模块简介 Qt由许多模块组成,分别支持不同领域的功能,主要分为 Essentials 和 Add-On. Qt Essential 是基本模块,它们可以在所有受支持的开发平台和经过测试的目 ...

  9. C++后续:QT学习(Qt概述,创建QT项目)

    目录 声明 一. Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt支持的平台 1.4 Qt版本 1.5 Qt的下载与安装 1.6 Qt的优点 二.创建 Qt项目 2.1 如何创建 2. ...

最新文章

  1. Linux的文件夹及文件的权限
  2. springboot七牛云---报{“error“:“download token auth failed“}错误
  3. 远程办公第五天,你还在扩容吗?
  4. Android studio导入项目提示The same input jar [*.jar] is specified twice
  5. git merge用法_Git 基本命令 merge 和 rebase,你真的了解吗?
  6. iptables学习笔记:端口转发之“内网访问外网”
  7. 物联网3A格局:阿里云、亚马逊等入选Gartner最新全球物联网竞争报告
  8. 我的手机,被“探针”了吗?
  9. 在Windows下的virtualenv中搭建Flask+MySQLDb开发环境
  10. 前端js上传文件转base64
  11. MySQL 新增、修改、删除 字段 sql语句
  12. cmpp java代码_cmpp.java 源代码在线查看 - cmpp的开发的短信端口实例 资源下载 虫虫电子下载站...
  13. 计算机硬盘中没有设控制器,电脑设置硬盘为兼容模式
  14. 微信小程序实时音视频功能简析(live-pusher与live-player)
  15. 五分钟了解机器学习的基本概念
  16. Material Components(MDC)简单使用介绍
  17. word标题级别编号设置
  18. 龙腾世纪审判一直连接服务器,【1.7.2】【rpg】我的世界龙腾世纪群组服务器
  19. react如何获取input值_react中怎么获取input的值?
  20. 邮件群发怎么一次发给几百个人?哪个邮箱群发效果好呢

热门文章

  1. 试卷批分(c++打表版)
  2. Codeforces 1004F Sonya and Bitwise OR (线段树)
  3. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
  4. mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...
  5. asynchttpclient 超时_深圳拟出台标准:外卖配送超时,要补偿消费者
  6. 高级流程图_数据收集方法之流程图
  7. 2021-03-30 严反馈系统
  8. maven package自己主动部署包
  9. Soring冲刺计划第三天(个人)
  10. Jquery赋值和取值input,combobox,numberbox........