Qt学习(四):qt读写文件
知识点
- QFile读写文件
- QFileInfo获取文件信息
- QDataStream读写文件
- QTextStream读写文件
- 内存文件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读写文件相关推荐
- Qt学习(四)---实例涂鸦画板mspaint
Qt学习(四)-实例涂鸦画板mspaint 一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二 ...
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- Qt学习之Qt基础入门(中)
1. 前言 上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法 Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门( ...
- Qt学习(十三)—— 文件读写
目录 文件系统结构图 QFile读文件 QFile写文件 QFileInfo获取文件信息 QDataStream读写文件 QTextStream操作文件 QBuffer 文件的读写应用场景十分广泛,也 ...
- QT学习:Qt对Office的基本读写
Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的 单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能 ...
- 嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板
想要把qt工程放到开发板上运行,就需要用到交叉编译.由于qt是跨平台的,所以只需要换个编译器编译一下就可以. 以qt学习–计时器的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时 ...
- python 文本换行_Python学习入门(23)—读写文件
(本号正在连续推出以Python官网文档为主线的系统学习Python的系列文章或视频,感兴趣的朋友们欢迎搜索关注.在这里学习Python事半功倍!本文及后续文章如无特别声明均以Windows平台作为演 ...
- Qt 学习(三) —— Qt 模块
1. Qt 模块简介 Qt由许多模块组成,分别支持不同领域的功能,主要分为 Essentials 和 Add-On. Qt Essential 是基本模块,它们可以在所有受支持的开发平台和经过测试的目 ...
- 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. ...
最新文章
- Linux的文件夹及文件的权限
- springboot七牛云---报{“error“:“download token auth failed“}错误
- 远程办公第五天,你还在扩容吗?
- Android studio导入项目提示The same input jar [*.jar] is specified twice
- git merge用法_Git 基本命令 merge 和 rebase,你真的了解吗?
- iptables学习笔记:端口转发之“内网访问外网”
- 物联网3A格局:阿里云、亚马逊等入选Gartner最新全球物联网竞争报告
- 我的手机,被“探针”了吗?
- 在Windows下的virtualenv中搭建Flask+MySQLDb开发环境
- 前端js上传文件转base64
- MySQL 新增、修改、删除 字段 sql语句
- cmpp java代码_cmpp.java 源代码在线查看 - cmpp的开发的短信端口实例 资源下载 虫虫电子下载站...
- 计算机硬盘中没有设控制器,电脑设置硬盘为兼容模式
- 微信小程序实时音视频功能简析(live-pusher与live-player)
- 五分钟了解机器学习的基本概念
- Material Components(MDC)简单使用介绍
- word标题级别编号设置
- 龙腾世纪审判一直连接服务器,【1.7.2】【rpg】我的世界龙腾世纪群组服务器
- react如何获取input值_react中怎么获取input的值?
- 邮件群发怎么一次发给几百个人?哪个邮箱群发效果好呢
热门文章
- 试卷批分(c++打表版)
- Codeforces 1004F Sonya and Bitwise OR (线段树)
- BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
- mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...
- asynchttpclient 超时_深圳拟出台标准:外卖配送超时,要补偿消费者
- 高级流程图_数据收集方法之流程图
- 2021-03-30 严反馈系统
- maven package自己主动部署包
- Soring冲刺计划第三天(个人)
- Jquery赋值和取值input,combobox,numberbox........