问题标签 [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 投票
2 回答
2119 浏览

c++ - 如何在 Qt 中使用 QDataStream 将自定义结构保存/加载到二进制文件中?

我将在二进制文件中保存一个结构并稍后加载它。我发现一种方法是使用QVariant. 这是我创建的一个简化的Qt Widget 应用程序示例。但是当我运行它时,二进制文件仍然是空的。你能帮我解决这个问题吗?另外,有没有更好的方法来做这样的事情?

主窗口.h:

主窗口.cpp:

mystruct.h:

评论:作为参考,此链接显示了类似的问题,但我无法正确理解/实施建议。例如,我试图定义一个新的运算符,正如这里所解释的那样但它不起作用。

0 投票
2 回答
156 浏览

c++ - 从 'const QVector 转换>' 到 'QVector>'

我该如何解决以下问题,即转换const QVector<QVector<qreal>>QVector<QVector<qreal>>

我尝试了几个步骤但没有帮助:

abc.points 是 type 的结构元素QVector<QVector<qreal>>,我试图从 a 中提取QDataStream

0 投票
1 回答
320 浏览

c++ - 如何知道 QDataStream 不能反序列化某些东西?

请考虑QDataStream文档中的以下代码片段:

有没有办法知道QDataStream不能将文件的内容反序列化为QString以及qint32如何处理此类反序列化错误QDatastream

0 投票
0 回答
422 浏览

c++ - Qt序列化不匹配运算符<<操作数类型是'QDataStream'

我在使用简单的托管结构进行序列化时遇到问题。

我的班级标题

和源cpp

当我尝试编译这个时,我得到这个错误:

错误:'operator<<' 不匹配(操作数类型为 'QDataStream' 和 'const MappySaver::Tile')

我使用这个类来序列化一个列表。在主窗体上,我有一个具有相同数据的小部件。

我使用这种方法尝试序列化。

如何解决此问题并进行序列化?

0 投票
2 回答
1067 浏览

c++ - QDataStream 将错误的值写入 QByteArray

我正在 Qt 中编写一个简单的基于 TCP 的网络应用程序,并希望使用QDataStreamQByteArray通过网络发送数据。问题是当我将数据放入时QByteArray,它们被“归零”。例如(MainWindow连接到定时器超时信号的插槽):

我一开始收到"hello"一次,但之后我只收到""。也是如此qint32。客户端和服务器都显示QByteArray大小为 14 字节,因此QDataStream将数据写入该数组,但它会生成它们0""当我使用s >> h然后使用时显示qDebug() << h

0 投票
2 回答
1144 浏览

c++ - (反)序列化枚举类

我正在尝试序列化和反序列化(使用QDataStream但在这里无关紧要)一个enum class变量:

序列化很简单:

但反序列化不是:

显然,static_cast不允许enum class引用对其基础类型的引用。此外,“明显”的解决方案:

根据这个问题的答案,实际上可能是非法的并且没有由标准定义,因为等效的表达式return stream >> (*static_cast<char *>(static_cast<void *>(&type)));在那里被声明为非法(或者更确切地说不是由标准定义)。如果是这种情况,我需要这样做:

这不是很漂亮,是 4 行而不是 1 行等等。对于这样一个(看似)简单的事情,对我来说似乎非常不必要。

我的问题:当将对变量的引用转换为其基础类型的引用时,通过reinterpret_cast或等价的方式是否真的非法(标准未定义) ?static_castvoid*enum class

0 投票
1 回答
87 浏览

qt - 从 ipc fifo 文件描述符读取缓冲区时未初始化 QDataStream

我想使用fifo(ipc)在两个应用程序之间进行通信,我通过“mkfifo MyPipe”命令创建了一个fifo。

第一个应用程序:

第二个应用程序:

……

读取 ipc fifo 后,“rxbuf”已完全初始化,但“myclassObjrd.lname”和“myclassObjrd.fname”均为空且未初始化。

0 投票
1 回答
340 浏览

qt - QDataStream 无法正常工作并在重用时返回错误

我在 QDataStream 中存储一些数据并立即获取数据

它适用于一次使用,但是当我重用此功能时,我得到错误分段错误。提前致谢。

0 投票
1 回答
620 浏览

c++ - 如何在 Qt5 中将二进制数据写入标准输出

QTextStream允许我进行包装stdout,以便我可以使用 Qt spesifics 方便地写入标准输出。例子:

然而,虽然QTextStream非常有用,但它不支持二进制数据。通过它的所有数据都应遵循有效的字符集和编码(unicode/UTF-8 等)。

因此,如果我想将原始二进制数据输出到,逻辑替换stdout是替换QTextStreamQDataStream. 但是,该类不允许我包装stdout(它没有采用 std 文件句柄的构造函数)。

那么在将二进制数据写入时,我有哪些选择来获得“Qt 便利” stdout?下一个最好的事情是什么?

PS:我知道将二进制数据写入标准输出并不总是好主意。但是,我真的需要这样做。

0 投票
1 回答
492 浏览

c++ - 调用 QDataStream::writeRawData 后 QDataStream 为空

我有一个相当奇怪的问题,使用QDataStream,或者至少对我来说很奇怪,因为我根本不理解这种行为。

当然,我的问题来自一个大项目,但我设法通过一个最小的示例重现了这种奇怪的行为,我现在将对其进行描述。

我有两节课

  1. 二进制数据读取器Reader
  2. 二进制数据解析器Parser

通过Readera 读取数据QTcpSocket,将每个接收到的数据块打包到 aQByteArray中,并通过 Qt 信号将该数组发送到Parser.

Parser所有接收到的数据块写入自己的数据块,QDataStream然后解析来自该流的数据包。

Parser将接收QByteArray到的数据写入其QDataStream. 的返回值QDataStream::writeRawData正确返回写入的字节数,但随后QDataStream::atEnd返回trueQDataStream::device.bytesAvailable返回零。

为什么?声称已写入的数据在哪里?QDataStream::writeRawData

你可以在这篇文章的和中找到代码。

环境: Windows 7 Enterprise SP1 64 位上的 Qt 5.9.1(MSVC 2015,32/64 位)


阅读器.h

阅读器.cpp

解析器.h

解析器.cpp

主文件

delete.pro 是的,我将我的最小示例项目称为“删除”:“D