Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QDataStream将QVariantMap序列化为QByteArray_C++_Qt_Serialization - Fatal编程技术网

C++ 使用QDataStream将QVariantMap序列化为QByteArray

C++ 使用QDataStream将QVariantMap序列化为QByteArray,c++,qt,serialization,C++,Qt,Serialization,我需要将QVariantMap序列化为QByteArray,这似乎是通过QDataStream实现的适当方法。然而,我在这样做时遇到了很多麻烦。我没有收到任何错误,但它实际上没有将任何内容保存到字节数组中 //Create a QVariantMap that has a key value pair QVariantMap *myMap = new QVariantMap(); myMap->insert("MyKey","the value for MyKey"); // Seria

我需要将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的不是QVariantMap,而是指向QVariantMap的指针。这只是向数组发送地址,而不是映射数据。这条变革之流
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) ) )