【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;
}相关文章:
【QT】文件流操作(QTextStream/QDataStream)
文本流/数据流(二级制格式) 文本流 (依赖平台,不同平台可能乱码)涉及文件编码 #include <QTextStream>操作的都是基础数据类型:int float string //Image Qpoint QRect就不可以操作 需要下面的 …...
CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决
在我的一个Cent OS7开发环境中,按https://yeyongjin.blog.csdn.net/article/details/134178420的方法升级GCC版本到8.3.1。 这两天,要用Google的addressSanitizer检验内存问题,加上编译参数后,却发现编译不通过。configure时直接退…...
ubuntu2004桌面系统英伟达显卡驱动安装方法
#如何查看显卡型号 lspci | grep -i vga#----output------ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f06 (rev a1)根据 Device 后的 值 进入网站查询 pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci #根据显卡型号,下载对应系统的驱动…...
Java通过Excel批量上传数据!!!
一、首先在前端写一个上传功能。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChange" :auto-upload"false"><el-icon class"el-icon--upload"><up…...
【PyQT/Pysider】控件背景渐变
默认渐变配色说明 background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255, 178, 102, 255), stop:0.55 rgba(235, 148, 61, 255), stop:0.98 rgba(0, 0, 0, 255), stop:1 rgba(0, 0, 0, 0));这段样式表使用了qlineargradient函数来创建…...
ChatGPT-4 VS 文心一言4.0
在线体验 地址(含 gpt 3.5 / 4.0,文心 3.5 / 4.0):https://chat.tool4j.com 点击访问 文心一言和ChatGPT-4都是非常强大的自然语言处理模型,它们都能够在对话系统和其他NLP应用中发挥巨大的作用。然而,它们…...
MYSQL------从概述到DQL
数据库(数据管理,数据存储的仓库) 数据库管理系统(操纵和管理数据库的大型软件) SQL是操作关系型的编程语言,是一套标准 MySQL下载安装完成以后,可以进行启动和停止操作,对于启动和停…...
MATLAB算法实战应用案例精讲-【图像处理】图像识别(基础篇)(二)
目录 数字图像处理基本知识 传统图像处理方法进行瑕疵检测 传统算法方向的选择...
Leetcode 3.12
leetcode hot 100 链表1.两两交换链表中的节点2.随机链表的复制3.排序链表 链表 1.两两交换链表中的节点 两两交换链表中的节点 1.必须要设置一个dummy (temp) 结点2.保存第二个节点3.先让第一个节点指向第三个节点4.再让第二个节点指向第一个节点5.最后让dummy指向第二个节点…...
【天池课堂】零基础入门数据挖掘-课程汇总
写在前面: 如果你现在很迷茫,但是又对数据挖掘感兴趣,建议先看看以下两个视频直播,两位大佬亲身讲述自己和数据挖掘的前世今生。 《如何入门数据挖掘竞赛》 鱼遇雨欲语与余。天池明星选手,武汉大学硕士,天…...
表单进阶(3)-上传文件和隐藏字段
上传文件:<input type"file"> 隐藏字段:<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled:<button disabled"disabled">注册</bu…...
LLM(大语言模型)常用评测指标-MAP@R
MAPR (Mean Average Precision at R) 是一种用于评估信息检索系统或排序模型效果的评价指标。它特别适用于那些返回一组相关结果的情况,例如搜索引擎或推荐系统。这里的“R”代表返回的相关结果的数量。MAPR 考虑了结果的排名和相关性两个因素。 计算方法 计算平…...
腾讯面经学习笔记
💖 前言 👩🏫 参考地址 💖 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间(程序上下文)&#…...
北京某中厂凉经
3月12号 大二想着找一份暑假面试,然后就海投。北京某上市公司给了面试,这也是我的第一个面试,听面试官最后的话大概是挂了。 大概回忆一下当时面试的部分内容吧,虽然已经过去一两小时的,而且我属于那种一面完就忘的差…...
离线数仓(五)【数据仓库建模】
前言 今天开始正式数据仓库的内容了, 前面我们把生产数据 , 数据上传到 HDFS , Kafka 的通道都已经搭建完毕了, 数据也就正式进入数据仓库了, 解下来的数仓建模是重中之重 , 是将来吃饭的家伙 ! 以及 Hive SQL 必须熟练到像喝水一样 ! 第1章 数据仓库概述 1.1 数据仓库概念 数…...
python | 类与对象
在 Python 中,我们用关键字 class 来定义类: class Player:pass Player 类中只有一条语句 pass,这是 Python 中的特殊语句,没有实际含义。 Python 在执行到它时也什么都不会做。不过它能够保证结构的完整性。例如,我…...
基于Qt 和python 的自动升级功能
需求: 公司内部的一个客户端工具,想加上一个自动升级功能。 服务端: 1,服务端使用python3.7 ,搭配 fastapi 和uvicorn 写一个简单的服务,开出一个get接口,用于客户端读取安装包的版本&#…...
【论文阅读】IEEE Access 2019 BadNets:评估深度神经网络的后门攻击
文章目录 一.论文信息二.论文内容1.摘要2.引言3.主要图表4.结论 一.论文信息 论文题目: BadNets: Evaluating Backdooring Attacks on Deep Neural Networks(BadNets:评估深度神经网络的后门攻击) 论文来源: 2019-IEEE Access …...
Unity 让角色动起来(动画控制器)
下载素材: 导入后,找到预制体和动画。 新建动画控制器,拖动到预制体的新版动画组件上。 建立动画关系 创建脚本,挂载到预制体上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public c…...
ubuntu22.04环境中安装pylint
ubuntu22.04环境中安装pylint sudo apt-get install python3-pipsudo aptitude install python3-pipsudo pip install pylint sudo apt-get install python3-pip 在安装pylint的时候,需要使用pip命令,在ubuntu22.04环境中命令如下: $ sudo …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
