gpt4 book ai didi

c++ - 使用 QDataStream 将 QVariantMap 序列化为 QByteArray

转载 作者:行者123 更新时间:2023-11-30 04:01:41 25 4
gpt4 key购买 nike

我需要将 QVariantMap 序列化为 QByteArray,看起来合适的方法是通过 QDataStream。但是,这样做我遇到了很多麻烦。我没有收到任何错误,但实际上并没有将任何内容保存到字节数组。

//Create a QVariantMap that has a key value pair
QVariantMap *myMap = new QVariantMap();
myMap->insert("MyKey","the value for MyKey");

// Serialize it to a QBiteArray using a QDataStream object
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
//qDebug() << byteArray.toHex(); ==> "" (because byteArray is empty)
stream << myMap;
//qDebug() << byteArray.toHex(); ==> "01" (regardless of what the key/value/etc. was, it's always 01)
//Test whether I can read it out
QVariantMap inMap;
QDataStream inStream(&byteArray, QIODevice::ReadOnly);
instream >> inMap;
//qDebug() << inMap.keys(); ==> () (No keys are in the map)

所以没有错误或明显的失败,但实际上它仍然没有将任何值(除了 01——大小?)放入 ByteArray。我已经尝试了很多关于这个主题的变体,没有一个有任何不同的结果(除了只会导致错误的变体)。

我所做的唯一有区别的事情是多行“stream << myMap”,它将 byteArray 设置为“010101”,例如,如果我重复该行 3 次。所以每次我运行“stream << myMap”时,我都会再得到一个“01”。

我担心我可能只是读取了错误的代码而写入却没问题,这就是为什么我添加了检查十六进制代码的调试行,并明确指出存在写入错误。

最佳答案

您的代码中有错误。您要发送给 byteArray 的内容不是 QVariantMap , 它是一个指向 QVariantMap 的指针.这只是将地址发送到数组而不是 map 数据。此更改stream << (*myMap);应该适合你。

下面是一个工作示例:

QVariantMap myMap, inMap;
QByteArray mapData;

myMap.insert("Hello", 25);
myMap.insert("World", 20);

QDataStream outStream(&mapData, QIODevice::WriteOnly);
outStream << myMap;
qDebug() << myMap;
QDataStream inStream(&mapData, QIODevice::ReadOnly);
inStream >> inMap;
qDebug() << inMap;

输出

QMap(("Hello", QVariant(int, 25) ) ( "World" ,  QVariant(int, 20) ) ) 
QMap(("Hello", QVariant(int, 25) ) ( "World" , QVariant(int, 20) ) )

请注意,我已经在我的实现中删除了指针。我确实更喜欢尽可能使用范围变量,并建议您这样做。这是一种获取和释放资源的简单方法,可以让您免于处理破坏工作。

关于c++ - 使用 QDataStream 将 QVariantMap 序列化为 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25614907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com