【QT】文件流操作(QTextStream/QDataStream)

文本流/数据流(二级制格式)

  • 文本流 (依赖平台,不同平台可能乱码)涉及文件编码
#include <QTextStream>

操作的都是基础数据类型:int float string

//Image Qpoint QRect就不可以操作

需要下面的

  • 数据流 (不依赖平台—二级制)不涉及文件编码,,
    怎么读进去,怎么读出来
#include <QDataStream>

不同的主机进行数据传传输,使用的就是数据流。

使用文件流操作必须注释#include

文件流操作基本和QFile相同

QTextStream

读文件(直接会当作一个字符串一次性读完)

//#include <QFile>QFile file(fileName);//指定打开方式  --有返回值bool isOk = file.open(QFile::ReadOnly);if(isOk == false){QMessageBox::critical(this,"ERROR","File open Failed");}//读文件QTextStream stream(&file);//将I/O设备给流对象stream.setCodec("utf8");//设置读取方式为utf8QString array;//读取多行        while(stream.atEnd())//判断读到最后一行{          //按照本地文件格式去读array += stream.readLine();}//显示文本ui->textEdit->setText(array);

QT中的乱码很恶心,需要记住上面的操作

写文件

按照文本流的方式写,会将将两部分连在一起

在这里插入图片描述

//写QFile f("aaa.txt");f.open(QFile::WriteOnly);QTextStream txt(&f);//写文件txt<<QString("lalalla")<<123456;f.close();//读QString buf1;f.open(QFile::ReadOnly);txt.setDevice(&f);txt>>buf1;//读操作符qDebug()<<buf1.toUtf8().data();

因此建议,读文件不要使用操作符的方式去读。最好使用readLine()/readAll()的方式读取

写的时候可以用上面方式去写

QDataStream

读(写的时候会把每一个数据分成一个小块,会给头部记录数据类型/长度)

!!!!!怎么写进去,怎么读出来!!!!

写 :如 1234 → pig → dog123

读 1234 pig dog 123

//#include <QFile>QFile f("aaa.txt");//文件对象(可以当作显示屏(I/O设备))f.open(QFile::WriteOnly);QDataStream txt(&f);   //写的时候会把每一个数据分成一个小块,会给头部记录数据类型/长度//写文件txt<<QString("lalalla")<<123456;  //运算符写入f.close();QString buf1;f.open(QFile::ReadOnly);txt.setDevice(&f);txt>>buf1;qDebug()<<buf1.toUtf8().data();

输出:lalala ,那123456去哪了?

在这里插入图片描述

给代码加上number 必须是int类型和下面的123456一一对应,读的时候两种类型必须对应

     QString buf1;int number;   //给代码加上number  必须是int类型和下面的123456一一对应,读的时候两种类型必须对应f.open(QFile::ReadOnly);txt.setDevice(&f);txt>>buf1>>number;qDebug()<<buf1.toUtf8().data()<<number;

在这里插入图片描述

由于数据流方式写入是二进制格式,因此直接打开文件时乱码的。

在这里插入图片描述

使用文本编辑器打开aaa.txt

在这里插入图片描述

QDataStream txt(&f); //对I/O设备进行操作,还可以对内存进行操作。

QByteArray :可以当作一个内存块

在这里插入图片描述

//对内存进行操作,即可操作可传输

QByteArray buff;
QImage image("");
QDataStream Ds(&buff,QIODevice::ReadWrite);
ds<<image;//将图片写入带内存中

完整代码

#include "widget.h"
#include "ui_widget.h"
//#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QPushButton>
#include <QTextCodec>
#include <QDebug>
#include <QTextStream>
#include <QDataStream>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->selectFile,&QPushButton::clicked,this,[=](){QString fileName= QFileDialog::getOpenFileName(this,"openfile","");if(fileName.isEmpty() == true){QMessageBox::warning(this,"warning","打开失败");return;}ui->lineEdit->setText(fileName);//创建对象//默认读取文件格式:utf8QFile file(fileName);//指定打开方式  --有返回值bool isOk = file.open(QFile::ReadOnly);if(isOk == false){QMessageBox::critical(this,"ERROR","File open Failed");}//读文件QTextStream stream(&file);//将I/O设备给流对象stream.setCodec("UTF-8");//设置读取方式为utf8QString array;//读取多行while(false == stream.atEnd())//判断读到最后一行{array += stream.readLine();//按照本地文件格式去读}//显示文本框ui->textEdit->setText(array);//文件读写完成
//        char buf[55] = {"1111"};
//          file.write(buf,strlen(buf));
//          file.write(QString("llala").toUtf8());
//          file.write(buf);
//        //关闭文件file.close();});//     QFile f("aaa.txt");
//     f.open(QFile::WriteOnly);
//     QTextStream txt(&f);
//     //写文件
//     txt<<QString("lalalla")<<123456;
//     f.close();//     QString buf1;
//     f.open(QFile::ReadOnly);
//     txt.setDevice(&f);
//     txt>>buf1;
//     qDebug()<<buf1.toUtf8().data();QFile f("aaa.txt");f.open(QFile::WriteOnly);QDataStream ds(&f); //对I/O设备进行操作,可以对内存进行嗯操作///写文件ds<<QString("lalalla")<<123456;f.close();QString buf1;int number;f.open(QFile::ReadOnly);ds.setDevice(&f);ds>>buf1>>number;qDebug()<<buf1.toUtf8().data()<<number;//     //对内存进行操作
//     QByteArray buff;
//     QImage image("");
//     QDataStream Ds(&buff,QIODevice::ReadWrite);
//     ds<<image;//将图片写入带内存中 }Widget::~Widget()
{delete ui;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍接口分隔原则&#xff08;ISP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、Py…

基于Qt 和python 的自动升级功能

需求&#xff1a; 公司内部的一个客户端工具&#xff0c;想加上一个自动升级功能。 服务端&#xff1a; 1&#xff0c;服务端使用python3.7 &#xff0c;搭配 fastapi 和uvicorn 写一个简单的服务&#xff0c;开出一个get接口&#xff0c;用于客户端读取安装包的版本&#…

<机器学习初识>——《机器学习》

目录 一、人工智能概述 1 人工智能应用场景 2 人工智能发展必备三要素 3 人工智能、机器学习和深度学习 二、人工智能发展历程 1 人工智能的起源 1.1 图灵测试 1.2 达特茅斯会议 2 发展历程 三、 人工智能主要分支 1 主要分支介绍 1.1 分支一&#xff1a;计算机视觉…

c++中string的模拟实现(超详细!!!)

1.string的成员变量、&#xff08;拷贝&#xff09;构造、析构函数 1.1.成员变量 private:char* _str;size_t _size; //string中有效字符个数size_t _capacity; //string中能存储有效字符个数的大小 1.2&#xff08;拷贝&#xff09;构造函数 //构造函数string(const char* …

【Linux进阶之路】HTTP协议

文章目录 一、基本概念1.HTTP2.域名3.默认端口号4.URL 二、请求与响应1.抓包工具2.基本框架3.简易实现3.1 HttpServer3.2 HttpRequest3.2.1 version13.2.2 version23.2.3 version3 总结尾序 一、基本概念 常见的应用层协议&#xff1a; HTTPS (HyperText Transfer Protocol Sec…

C# 8.0+版本项目 string不可为空

1.在某一次新建项目的时候发现&#xff0c;新建的项目&#xff0c;写的测试接口&#xff0c;接口的入参有string的参数&#xff0c; 但是调用接口的时候string的参数没有传报了400&#xff0c;很奇怪&#xff0c;也没有语法错误之类的。 2.解决办法 在项目上右键->属性->…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Span)

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 10开始支持继承父组件Text的属性&#xff0c;即如果子组件未设置…

直播美颜SDK的商业化应用:如何为直播平台带来更多商业机会?

直播过程中的自然环境和摄像头本身的限制可能会影响用户的体验&#xff0c;因此直播美颜SDK的商业化应用应运而生&#xff0c;它为直播平台带来了更多商业机会。 直播美颜SDK是一种集成在直播平台中的软件开发工具包&#xff0c;它能够对直播过程中的视频流进行实时的美颜处理…

【C++ Primer Plus学习记录】简单文件输入/输出

有时候&#xff0c;通过键盘输入并非最好的选择。例如&#xff0c;假设您编写了一个股票分析程序&#xff0c;并下载了一个文件&#xff0c;其中包含1000种股票的价格。在这种情况下&#xff0c;让程序直接读取文件&#xff0c;而不是手工输入文件中所有的值&#xff0c;将方便…

惬意了解 —— 前端发展史

下拉底部&#xff0c;参与投票&#xff5e;&#xff5e; 前端发展史&#xff1a;从洪荒时代到现代 前端开发已经走过了将近20年的历程&#xff0c;从最早的纯静态页面到如今的现代前端框架&#xff0c;我们见证了前端技术的蓬勃发展。让我们一起回顾这段历史。 洪荒时代&…

深入联合文件系统

Union File System&#xff08;联合文件系统&#xff0c;UnionFS&#xff09;是一种轻量级的高性能分层文件系统&#xff0c;它支持将文件系统中的修改信息作为一次提交&#xff0c;并层层叠加&#xff0c;同时可以将不同目录挂载到同一个虚拟文件系统下&#xff0c;应用看到的…

2024年A特种设备相关管理(锅炉压力容器压力管道)证考试题库及A特种设备相关管理(锅炉压力容器压力管道)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;证考试题库及A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#…

不同的二叉搜索树 01背包

96.不同的二叉搜索树 力扣题目链接(opens new window) 给定一个整数 n&#xff0c;求以 1 ... n 为节点组成的二叉搜索树有多少种&#xff1f; dp[3] dp[2] * dp[0] dp[1] * dp[1] dp[0] * dp[2] dp[i] &#xff1a; 1到i为节点组成的二叉搜索树的个数为dp[i]。 dp[i] d…

Vivado2021及以下版本 HLS生成IP核报错的解决方案

摘要&#xff1a;生成 HLS ip的时候会报错&#xff0c;无法生成&#xff1b;原因是2021及以下的版本都会有时间错误的问题&#xff0c;所以要用官方的补丁包&#xff0c;但是打了补丁包有时候也会没用 一、打补丁 以下是xilinx提供的解决办法&#xff1a; Export IP Invalid …

振弦采集仪在岩土工程施工质量监控中的应用案例分析

振弦采集仪在岩土工程施工质量监控中的应用案例分析 河北稳控科技振弦采集仪是一种用来监测振动的仪器设备&#xff0c;可以通过采集振弦信号来分析结构的振动特性。在岩土工程施工质量监控中&#xff0c;振弦采集仪可以用于以下几个方面的应用。 1. 地基与基础工程监测&#…

11.Java---语法总结之一个小项目

图书管理系统 Java学习了很久了,今天将运用之前学习的所有东西整理做个小小的小项目. 1.首先是各种包和操作方法建好 2.然后是项目的大框架搭好 3.然后就开始实现各个部分了 看看最后的运行结果吧! 管理员测试 1.登录&显示图书的运行结果 2.查找&新增图书的运行结…

【黑马程序员】python函数

文章目录 函数什么是函数为什么学习函数函数定义函数的传入参数函数的返回值返回值基础None返回值 函数说明文档函数的嵌套调用定义代码示例 全局变量和局部变量全局变量global变量局部变量 函数综合案例 函数 什么是函数 组织好的&#xff0c;可重复使用的、用来实现特定功能…

图像分割损失函数

为什么要乘以2&#xff0c;是为了让DICE的值域在0和1之间 优化&#xff1a;两种LOSS相加 Focus loss:

【PLSQL】plsqldeveloper查询结果记录显示不全

plsql版本号为12或13。 例如scott用户的emp表中共有14条数据&#xff0c;但select * from emp;查询结构只显示13条记录&#xff0c;如下&#xff1a; 这是由于查询结果显示条数&#xff0c;根据查询框高度自动计算可以显示多少条记录&#xff0c;如果想显示全&#xff0c;则需…

阿里云领盲盒活动

阿里云每次的活动都很给力&#xff0c;实打实地发东西。 这次是体验 通义灵码 的活动&#xff0c;这个是体验的推广链接 「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」 我是在vscode安装的&#xff0c;体验还行&#xff0c;抽奖抽到了马克杯 这个是抽奖的具体步骤 https:…