问题标签 [qdatastream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
333 浏览

c++ - 使用 QDataStream 将 QImage 转换为 QByteArray

我试图将从 ScreenShot 制作的 QImage 转换为 QByteArray 以通过 QTCPSocket 发送。当我将 QImage 转换为 QByteArray 并在发送之前我尝试反序列化并在标签上显示它不能!我的错误是什么?谢谢帮忙。

从 ScreenShot 制作的 sampleQImage:

0 投票
1 回答
274 浏览

c++ - QDataStream 读取到 QVector

我有一个QByteArray包含代表两个浮点数的 8 位,读取QDataStream到的正确和最简单的方法是QVector<float>什么?

代码:

上面的代码给出:

STD:: 内存位置的 bad_alloc"

我已经阅读了相关的问题,但我无法正确理解它们以在我的情况下实施它。

以下是我目前的解决方案,但我认为它过于复杂,有一种更简单的方法可以做到这一点:

0 投票
1 回答
397 浏览

c++ - QDataStream 读取和写入的字节数比 QFile::length() 报告的要多

我有一个实用程序应该将文件从一个位置复制到另一个位置。

我遇到的问题是当使用QDataStream读取 X 字节并写入它时,正在读取/写入的字节数超过了文件的字节数。我看到这个问题发生在许多文件上。

我正在使用QDataStream::readRawData()QDataStream::writeRawData()来促进读取/写入文件,如下所示

这个问题并不一致,但它时不时发生,我不知道为什么。有人对可能的原因有想法吗?

0 投票
1 回答
131 浏览

qt - 在 Qt 中使用 QUdpSocket 将 Union 转换为 QByteArray,反之亦然

我有一个像下面这样的联盟

我想将myDataunion 转换为 aQByteArray以便我可以使用QUdpSocketusing writeDatagram()函数通过套接字发送它。所以首先告诉我如何将其转换为QByteArray.

接下来的事情是,在接收方我怎样才能再次转换QByteArray成这个联盟myData

0 投票
1 回答
99 浏览

utf-8 - QDataStream readQString() 如何读取 utf8 字符串

我正在尝试从使用 Qt 的 QDataStream 方法对数据进行编码的应用程序中解码 UDP 数据包数据,但在尝试解码字符串字段时遇到问题。文档说数据是用 utf8 编码的。python QDataStream 模块只有一个 readQString() 方法。数字似乎可以很好地解码,但是当第一个字符串解码不正确时,流指针会变得混乱。

如何解码这些 UTF8 字符串?

我正在使用源项目中的一些文档解释编码:wsjtx-2.2.2.tgz NetworkMessage.hpp 头文件中的描述

例如,有一条状态消息带有这样的评论:

收到状态消息时来自套接字的示例数据:

b'\xad\xbc\xcb\xda\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x06WSJT-X\x00\x00\x00\x03\x00\x00\x00 \x052.1.0\x00\x00\x00\x0624fcd1'

0 投票
0 回答
163 浏览

python - 在 PyQt >> Qt-C++ 之间使用 QDataStream 序列化/反序列化 QVariantMap

我可以通过 PyQt5 中的 QDataStream 成功序列化/反序列化 QVariantMap

Python :

这完全可以反序列化:

我可以在钥匙上拿到所有物品。

但我无法从 C++ 中得到它。

如何从 c++ 获取此 QDataStream (QVariantMap) ?

vmat_x 始终为空

任何想法 ?

编辑:

消息是来自 Python xox 的 QBytearray

0 投票
1 回答
43 浏览

c++ - 无法在没有命名空间冲突的情况下定义友元函数

我创建了一个类(MyNodeClass),现在想要添加序列化功能。我声明(在 mynodeclass.h 中)我的序列化方法如下:

我的定义(在 mynodeclass.cpp 中)是:

编译器抱怨我的 operator<< 无法访问 NS::MyNodeClass 的私有成员。这意味着签名没有排队。我已经尝试了命名空间相关更改的所有组合,但无法弄清楚。我在这篇文章之后建模了我的代码

应该如何定义友元函数,以便不会抱怨命名空间或访问私有成员?(请注意,我能找到的所有示例都使用单个文件,因此拆分为 .h 和 .cpp 是需要解决的问题的一部分)

0 投票
0 回答
34 浏览

c++ - 通过 QDataStream 转换 littleEndian

我想通过网络发送一些整数(int32_t)。

为此,我首先转换整数并发送它们。

然后 Qt 应该完成这项工作,所以我尝试了 QDataStream 转换,但失败了,值 > 128 为负数。所以目前我做了这样的转换:

转换这些整数的最佳方法是什么,for 循环对我来说似乎不是最优的。

谢谢

0 投票
1 回答
130 浏览

qt - QBtyeArray QDataStream qCompress 到文件添加额外的前导字节

Qt/C++ 程序具有将对象数据 ( _token) 写入文件的函数,如下所示:

_token 是以下内容的一个实例struct

当文件被保存时,它在开始时有 4 个额外的字节,这会将文件呈现为无效的 zlib 文件。

我们可以看到上面的 5-6 字节9C 78是 zlib 签名,但在这些之前的 4 字节是问题所在。

要检查压缩数据是否正确,我执行以下操作:

dd if=file.token bs=1 skip=4 | openssl zlib -d

这会产生预期的结果(用于测试)。

问题在于应用程序将这些数据读回数据对象:

这将返回 null - 因为前导 4 个无关字节。我可以输入一些代码来跳过这 4 个前导字节,但我怎么知道它总是 4 个字节?我想肯定的是文件数据都是 zlib 压缩的。

我的问题是如何避免首先保存这些字节,以便在重新读取时已知格式为 zlib 类型?

0 投票
0 回答
39 浏览

python - 将 QDataStream 对象传递给另一个方法(复制构造函数与有状态)

在实现通用拖放模型时,我遇到了以下问题。在对mimeData进行编码时,我想将拖动索引的原始行和列写入数据流。项目数据的序列化取决于程序员选择的特定数据结构,因此应该封装在单独的方法中。DragDropListModel 的子类对其模型项使用不同的数据结构只需覆盖此封装方法。

问题是 QDataStream 上的读/写是有状态的。例如,请看一下 decode_data()。将 QDataStream 对象传递给负责从流中解码下一项的方法,(可能)调用复制构造函数。现在 decode_item_from_stream() 使用数据流的副本。在反序列化过程中完成的读取改变了复制的数据流对象的状态,但 decode_data() 中原始对象的状态保持不变。这应该会导致 while 循环的下一次迭代崩溃。

因此我的两个问题是:

  1. 我的描述是准确的还是我误解了什么?

  2. python 是否有一种方法可以规避这些问题(其他语言可能通过引用传递来解决这个问题),同时保持方法彼此分开?