问题标签 [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.
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服务器:
c++ - Qt - 通过 QDataStream TCP 发送大量数据
我想对与 ECU 的 TCP 连接进行基准测试(传输率)
为此,我想发送一些数据。可以在我的 GUI 中将数据量设置为 x KB 到 x GB。
transferSize 是根据 GUI 中设置的值计算得出的。缓冲区大小为 1024:
所以我调用 tcpclient.sendData(transferSendBuffer, currentSendSize) 函数也只要 toSend > 0:
我在 Qt(通用 C++)上很新,我确定我做错了;)它确实有效,但是当我尝试发送更大数量的数据时崩溃了。
初始化填充数组而不是 for 循环的更好方法是什么?
在一般情况下使用 QDataStream 有什么更好的方法?
非常感谢。
c++ - 使用 QString 和 QByteArray 的 QDataStream 问题
我QDataStream
以前写 3 个数字,ba.size() 是 7,但我对此感到困惑:
如果 QStringsize
是 1,ba 的大小加 6,为什么会这样?sizeof(QString)
是 4。
python - QTcpsocket/QTcpserver传输,如何使用QdataStream传输一个表数据
QTcpsocket/QTcpserver传输,如何使用QdataStream传输一个表数据??
有思路:在每一行写数据流,然后调用write(),但是怎么再写呢?
存在问题:数据乱码,第一行数据重复写入。
从fh文件中提取保存的数据流数据,写self.block进行TCP传输(数据以表格每一行的格式保存,读出行数和列表数据)->不能正常显示求例子或想法,用 PYQT5 编写
服务器代码:
客户端.py
输入数据:
错误输出数据:
c++ - 如何使用 QDatastream 在 QT 中正确序列化和反序列化 QList 类?
我正在尝试序列化自定义类Layer*
并使用 QDataStream 将其读回。现在,Layer
是一个具有虚方法的抽象类,它被不同类型的层继承:RasterLayer
、TextLayer
等AdjustmentLayer
。
我有一个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),答案不够清楚,我无法理解。
我有一个关于中间值持有者类的想法,我将使用它来序列化各种层,并让它根据层的类型创建和注入参数,但我不确定这是否可行。
谢谢你的协助。
c# - 在 C# 中使用 QDataStream 读取在 QT 中创建的二进制文件
我正在尝试读取从QT application
using创建的现有文件QDataStream
,我正在使用C#
它来读取它,但我无法正常工作。
这是我用于读取文件的 C# 代码:我没有收到任何错误,只是一个空白MessageBox
.
如何QT
使用 C# 读取使用 QDataStream 创建的文件?
这是用于将文件写入QT
.
c++ - 从数组中的文件中读取多个浮点数
我想从我已经写过的文件中读取多个浮点值:
我可以使用这个来读取这个文件:
但是单独读取这些浮点数并不是那么有效,所以我想一起读取前 4 个浮点数(maxX,maxY,minX,minY),然后读取一个 int,然后一起读取所有其他浮点数(floatX 和 floatY 的实例)。
我已经尝试过了:
但它给出了错误的结果。
那么,如何在一个缓冲区数组或向量中读取多个浮点数?
升级版:
我也已经看到 getline() 了,但是我如何char *
从二进制文件中迭代并从中获取浮点数呢?
c++ - QT 从 QDataStream 读/写
我想我对所有这些是如何工作的有一个根本的误解,我试图在我的 QDataStream 中组合 2 个 hexfile,然后将它们输出到一个新的 QFile。
结果只是一个空文件,有什么建议吗?
qt - 从 QDataStream 读取到 QVector:应用程序因 SIGABRT 信号而崩溃
出现此消息的崩溃:
下级停止了,因为它收到了来自操作系统的信号。
信号名称:SIGABRT
信号含义:中止
发生在这行代码:
我无法弄清楚为什么会发生崩溃。我想知道是否有人可以给我一个提示...
更新
当代码恰好位于崩溃线时,我逐步执行了代码并捕获了本地值:
崩溃的确切位置在文件中的这一行qdatastream.h
:
我尝试为我QVector<float> floatPos0
的 by.reserve()
和.resize()
方法分配一个大小,但它没有帮助。
我正在使用 Qt 5.9.4