问题标签 [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 回答
481 浏览

python - 在 QTcpSocket 和 python 套接字之间交换数据的正确方法是什么?

我正在将 .jpg 图像从 Qt 客户端发送到 python 服务器。Qt 客户端发送如下:

服务器是:

输出是:

在输出中,.jpg 文件从'\xff\xd8'开始。由于 C++ int是 4 字节,服务器需要“ {4 byte}\xff\xd8... ”。但是,前面的字节总是不同的大小。有时是 8 个字节,但有时甚至不同(例如 6 或 9 个字节)。我无法弄清楚它背后的原因。这里有什么问题?

平台:win7、Qt 5.9.1、Python 3.4。


编辑

按照@Frank的回答,我将代码更改如下,一切正常:

Qt客户端发送方法:

Python服务器:

0 投票
0 回答
350 浏览

c++ - Qt - 通过 QDataStream TCP 发送大量数据

我想对与 ECU 的 TCP 连接进行基准测试(传输率)

为此,我想发送一些数据。可以在我的 GUI 中将数据量设置为 x KB 到 x GB。

transferSize 是根据 GUI 中设置的值计算得出的。缓冲区大小为 1024:

所以我调用 tcpclient.sendData(transferSendBuffer, currentSendSize) 函数也只要 toSend > 0:

我在 Qt(通用 C++)上很新,我确定我做错了;)它确实有效,但是当我尝试发送更大数量的数据时崩溃了。

初始化填充数组而不是 for 循环的更好方法是什么?

在一般情况下使用 QDataStream 有什么更好的方法?

非常感谢。

0 投票
2 回答
999 浏览

c++ - 使用 QString 和 QByteArray 的 QDataStream 问题

QDataStream以前写 3 个数字,ba.size() 是 7,但我对此感到困惑:

如果 QStringsize是 1,ba 的大小加 6,为什么会这样?sizeof(QString)是 4。

0 投票
0 回答
164 浏览

python - QTcpsocket/QTcpserver传输,如何使用QdataStream传输一个表数据

QTcpsocket/QTcpserver传输,如何使用QdataStream传输一个表数据??

有思路:在每一行写数据流,然后调用write(),但是怎么再写呢?

存在问题:数据乱码,第一行数据重复写入。

从fh文件中提取保存的数据流数据,写self.block进行TCP传输(数据以表格每一行的格式保存,读出行数和列表数据)->不能正常显示求例子或想法,用 PYQT5 编写

服务器代码:

客户端.py

输入数据:

在此处输入图像描述

错误输出数据:

在此处输入图像描述

0 投票
1 回答
131 浏览

python - 我要查看原图

在此处输入图像描述

我想查看原始图像文件。

但是所有图像都被转换为斑点、损坏的图像。

似乎前面的图像不等于后面的图像。

请将 QImage 构造函数中的图像大小更改为您的任意示例图像的大小。

如果我执行这段代码,我会发现损坏的图像。为什么?

在此处输入图像描述

我试图将 Format.Format_ARGB32_Premultiplied 更改为各种模式。

但所有模式都不太顺利。

0 投票
2 回答
1268 浏览

c++ - 如何使用 QDatastream 在 QT 中正确序列化和反序列化 QList 类?

我正在尝试序列化自定义类Layer*并使用 QDataStream 将其读回。现在,Layer是一个具有虚方法的抽象类,它被不同类型的层继承:RasterLayerTextLayerAdjustmentLayer

我有一个QList<Layer*> layers跟踪所有图层的方法,并且对图层所做的任何调整都会在列表中更新。我需要将 QList 序列化和反序列化为其原始状态并恢复各个层(不同类型)的属性。

这是layer.h

这由RasterLayer类扩展:

我目前正在尝试测试这样的序列化反序列化RasterLayer

现在,正如您在此处看到的那样,我专门将其转换Layer*RasterLayer*要序列化的 a,这很有效,因为到目前为止我只处理了一种类型的层。所以我的第一个问题是:

如何将此序列化过程推广到所有类型的层?

每种类型的层都有不同的序列化方式,因为每个层都有不同的属性。此外,这里的铸造感觉有点代码味道,可能是一个糟糕的设计选择。因此,将整个层列表序列化并调用其相应的重载运算符将是预期的场景。

我的第二个问题是:

如何正确反序列化数据? 这是我目前对个人进行序列化的方式RasterLayer

首先,我不认为在这种情况下我应该对指针进行序列化,但我不确定还能做什么或如何做得更好。其次,反序列化在这里有效,但它并没有完全达到我期望的效果。尽管我在重载运算符中使用了 setter,但实际上并没有正确更新图层。我需要调用构造函数来创建一个新层。

我试过这个:使用 Qt 进行序列化,但我不太确定如何Layer*将其转换为Layer、序列化、反序列化,然后将其转换回Layer*. 所以我需要添加第三步:

然后推layer3送到列表以使其真正起作用。根据这篇文章:https ://stackoverflow.com/a/23697747/6109408 ,我真的不应该new RasterLayer...在运算符重载函数内部做一个(否则我会在地狱里炸),我正在遵循给出的第一个建议那里,这对我来说不是很有效,我不知道正确的方法。

另外,我如何为Layer*s 的一般 QList 反序列化它,而不必创建新的特定层实例并将反序列化数据注入它们?虽然这很相似:Serialize a class with a Qlist of custom classes as member (using QDataStream),答案不够清楚,我无法理解。

我有一个关于中间值持有者类的想法,我将使用它来序列化各种层,并让它根据层的类型创建和注入参数,但我不确定这是否可行。

谢谢你的协助。

0 投票
1 回答
718 浏览

c# - 在 C# 中使用 QDataStream 读取在 QT 中创建的二进制文件

我正在尝试读取从QT applicationusing创建的现有文件QDataStream,我正在使用C#它来读取它,但我无法正常工作。

这是我用于读取文件的 C# 代码:我没有收到任何错误,只是一个空白MessageBox.

如何QT使用 C# 读取使用 QDataStream 创建的文件?

这是用于将文件写入QT.

0 投票
1 回答
367 浏览

c++ - 从数组中的文件中读取多个浮点数

我想从我已经写过的文件中读取多个浮点值:

我可以使用这个来读取这个文件:

但是单独读取这些浮点数并不是那么有效,所以我想一起读取前 4 个浮点数(maxX,maxY,minX,minY),然后读取一个 int,然后一起读取所有其他浮点数(floatX 和 floatY 的实例)。
我已经尝试过了:

但它给出了错误的结果。

那么,如何在一个缓冲区数组或向量中读取多个浮点数?

升级版:

我也已经看到 getline() 了,但是我如何char *从二进制文件中迭代并从中获取浮点数呢?

0 投票
1 回答
2654 浏览

c++ - QT 从 QDataStream 读/写

我想我对所有这些是如何工作的有一个根本的误解,我试图在我的 QDataStream 中组合 2 个 hexfile,然后将它们输出到一个新的 QFile。

结果只是一个空文件,有什么建议吗?

0 投票
1 回答
408 浏览

qt - 从 QDataStream 读取到 QVector:应用程序因 SIGABRT 信号而崩溃

出现此消息的崩溃:

下级停止了,因为它收到了来自操作系统的信号。

信号名称:SIGABRT

信号含义:中止

发生在这行代码:

我无法弄清楚为什么会发生崩溃。我想知道是否有人可以给我一个提示...


更新

当代码恰好位于崩溃线时,我逐步执行了代码并捕获了本地值:


崩溃的确切位置在文件中的这一行qdatastream.h


我尝试为我QVector<float> floatPos0的 by.reserve().resize()方法分配一个大小,但它没有帮助。


我正在使用 Qt 5.9.4