qt QDataStream详解

1. 概述

QDataStream是Qt框架中的一个核心类,主要用于处理二进制数据的序列化和反序列化。它提供了高效、跨平台的方式,将C++数据结构转化为字节流,便于在网络传输、持久化存储等场景下使用。QDataStream可以处理包括整数、浮点数、布尔值、字符串等多种数据类型,并且支持将这些数据类型以二进制形式写入到文件、套接字或其他设备中,也可以从这些设备中读取并解析二进制数据。

2. 重要方法

QDataStream类提供了一系列重要的方法,用于数据的读写和格式控制。以下是一些关键的方法:

  • 构造函数:QDataStream(QIODevice *d)将QDataStream与指定的QIODevice(如QFile、QTcpSocket等)关联起来,以便进行数据的读写操作。
  • << 运算符:用于将数据写入到数据流中。例如,stream << anInteger << aString;可以将整数和字符串写入到数据流中。
  • >> 运算符:用于从数据流中读取数据。例如,stream >> anInteger >> aString;可以从数据流中读取整数和字符串。
  • setVersion(int):设置数据流的版本,这对于跨版本兼容性非常重要。例如,stream.setVersion(QDataStream::Qt_5_15);可以设置数据流的版本为Qt 5.15。
  • setByteOrder(QDataStream::ByteOrder):设置字节序,QDataStream支持大小端转换。例如,stream.setByteOrder(QDataStream::LittleEndian);可以将字节序设置为小端模式。

此外,QDataStream还可以与QIODevice的子类(如QGzipDevice)配合使用,实现数据的压缩后再序列化。

3. 重要信号

QDataStream类本身并不直接提供信号(signals)功能,因为它是用于数据序列化和反序列化的工具类,而不是用于事件驱动的UI组件。然而,在使用QDataStream进行文件或网络通信时,可以结合QIODevice或其他相关类提供的信号来监控数据的读写状态。例如,QIODevice类提供了readyRead()、bytesWritten()等信号,可以用于监控数据的可读性和写入进度。

#include <QCoreApplication>  
#include <QFile>  
#include <QDataStream>  
#include <QDebug>  struct MyData {  int num;  char ch[2];  bool b;  double d;  qint16 count;  
};  int main(int argc, char *argv[]) {  QCoreApplication a(argc, argv);  // 将二进制数据写入到数据流中  QFile file("myFile.dat");  if (!file.open(QIODevice::WriteOnly)) {  qDebug() << file.errorString();  return -1;  }  QDataStream out(&file);  out << QString("the answer is") << (qint32)42;  file.flush();  file.close();  // 从数据流中读取二进制数据  if (!file.open(QIODevice::ReadOnly)) {  qDebug() << file.errorString();  return -1;  }  QDataStream in(&file);  QString str;  qint32 num;  in >> str >> num;  qDebug() << "Read from file:" << str << num;  file.close();  // 写入结构体  QFile file2("myFile2.dat");  if (!file2.open(QIODevice::WriteOnly)) {  qDebug() << file.errorString();  return -1;  }  MyData data;  data.b = true;  data.num = 64;  data.count = 16;  data.ch[0] = 'a';  data.ch[1] = 'b';  data.d = 3.1415926;  QDataStream out2(&file2);  out2.writeBytes((const char*)&data, sizeof(MyData));  file2.close();  return a.exec();  
}

觉得有帮助的话,打赏一下呗。。

           

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

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

相关文章

使用Spring Validation实现数据校验详解

目录 前言1. Spring Validation概述2. 配置Spring Validation2.1 引入依赖2.2 启用全局校验 3. 使用注解进行参数校验3.1 基本校验注解3.2 使用Pattern进行正则校验3.3 综合示例 4. 在控制器层应用校验4.1 方法参数校验4.2 自定义错误处理 5. 高级应用&#xff1a;自定义校验注…

链表(C 语言)

目录 一、链表的概念1. 链表的结构2. 链表的分类3. 链表的优势 二、链表的实现1. 无头单项非循环链表的实现1.1 代码说明 2. 带头双向循环链表的实现2.1 代码说明 三、链表和顺序表的区别四、链表总结 一、链表的概念 链表是一种顺序表&#xff0c;它由一个一个的节点组成&…

QinQ的基础实验

拓扑 命令 LSW1 [LSW1]vlan batch 2 3 4 Info: This operation may take a few seconds. Please wait for a moment...done. [LSW1]interface g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type hybrid [LSW1-GigabitEthernet0/0/1]port hybrid untagged vlan 2 3 [LSW…

python-读写Excel:openpyxl-(4)下拉选项设置

使用openpyxl库的DataValidation对象方法可添加下拉选择列表。 DataValidation参数说明&#xff1a; type&#xff1a; 数据类型("whole", "decimal", "list", "date", "time", "textLength", "custom"…

Elasticsearch中时间字段格式用法详解

Elasticsearch中时间字段格式用法详解 攻城狮Jozz关注IP属地: 北京 2024.03.18 16:27:51字数 758阅读 2,571 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索以及分析等功能&#xff0c;广泛…

【JavaEE初阶 — 多线程】Thread的常见构造方法&属性

目录 Thread类的属性 1.Thread 的常见构造方法 2.Thread 的几个常见属性 2.1 前台线程与后台线程 2.2 setDaemon() 2.3 isAlive() Thread类的属性 Thread 类是JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的Thread 对象与之关联&am…

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck

论文阅读笔记&#xff1a;DRCT: Saving Image Super-Resolution away from Information Bottleneck 1 背景1.1 问题1.2 本文提出的方法 2 创新点3 方法4 模块4.1 问题描述4.2 深度特征提取模块4.3 同任务渐进式训练策略 5 效果5.1 和SOTA方法对比 论文&#xff1a;https://arxi…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1&#xff1a;变色 2.2.2 情况2&#xff1a;单旋变色 2.2…

健身房数字化转型:SpringBoot管理系统

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

字符串相乘(全网最快0ms方法)

一&#xff1a;题目 二&#xff1a;思路 解释&#xff1a;每次相乘的结果不进位直接放进同一个数组里&#xff0c;相同位置则新放进的结果即可&#xff0c;最后得到左图的数组&#xff0c;再对其进行进位&#xff0c;得到正确的结果 Q1&#xff1a;数组的大小取多少&#xff1…

虚拟展厅和实景复刻有什么区别?应用场景和优势有哪些?

虚拟展厅和实景复刻在展览展示领域均扮演着重要角色&#xff0c;但二者之间存在显著的差异。以下是对这两者的详细比较&#xff1a; 一、定义与构建方式 虚拟展厅 虚拟展厅是利用数字技术和三维建模技术创建的虚拟展览环境&#xff0c;使参观者可以通过计算机、智能手机等设…

如何删除react项目的默认图标,使在浏览器中不显示默认图标favicon.ico

要删除 React 项目的默认图标&#xff0c;使在浏览器中不显示默认图标favicon.ico&#xff0c;其实有两种方法&#xff1a; 方法一 方法要点&#xff1a;删除掉 public 目录下的 favicon.ico 文件&#xff0c;再用浏览器访问时&#xff0c;如果加载不到图标文件&#xff0c;就…

计算机网络——路由器构成

算路由表是分布式去算——你算你的&#xff0c;我算我的 输出队列非先来先传 调度发生在哪里 缓存队列一般是应对——来数据方向的速度过快问题

项目活动进度计算题

六个时间参数①最早开始时间ESmax{紧前工作最早完成时间EF}&#xff08;紧前取大&#xff09; 最早完成时间EFES工期&#xff0c;从左→右计算&#xff0c;累加取大 ②最迟完成时间LFmin{紧后工作最迟开始时间LS}&#xff08;紧后取小&#xff09; 最迟开始时间LSLF-工期&am…

练习LabVIEW第四十题

学习目标&#xff1a; 用labvIEW做一个循环闪烁指示灯&#xff0c;要能够在前面板调节周期和占空比。 开始编写&#xff1a; 前面板 一个布尔指示灯一维数组&#xff0c;两个数值输入控件&#xff1b; 程序框图 添加一个while循环&#xff0c;循环内添加初始化数组&…

工商业储能是什么,工商业储能有什么作用?

随着全球能源结构的转型和“双碳”目标的推进&#xff0c;工商业储能系统作为新型电力系统的重要组成部分&#xff0c;正逐渐成为能源管理和电力市场的关键力量。工商业储能系统通过削峰填谷、需量管理、电力现货交易等多种方式&#xff0c;不仅能够有效降低企业的用电成本&…

DApp开发定制:合约设计与源码搭建支持快速上线

随着区块链技术的飞速发展&#xff0c;去中心化应用&#xff08;DApp&#xff09;已经成为区块链生态中不可或缺的一部分。DApp不仅改变了传统互联网应用的运作方式&#xff0c;还通过去中心化的理念和智能合约的支持&#xff0c;赋能了用户和开发者。无论是金融、游戏、社交、…

ssm+vue683基于VUE.js的在线教育系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

多商户电商平台开发指南:基于直播带货系统源码的搭建方案详解

本篇文章&#xff0c;小编将详细解析如何利用直播带货系统源码&#xff0c;快速搭建一套多商户电商平台的解决方案。 一、直播带货系统在多商户电商平台中的应用价值 在多商户电商平台中&#xff0c;直播带货系统可以帮助商家&#xff1a; 1.增加用户互动 2.提升转化率 3.…

登录功能设计(php+mysql)

一 登录功能 1. 创建一个登录页面&#xff08;login.php&#xff09;&#xff0c;包含一个表单&#xff0c;用户输入用户名和密码。 2. 在表单的提交事件中&#xff0c;使用PHP代码处理用户输入的用户名和密码。 3. 首先&#xff0c;连接MySQL数据库。然后&a…