Lex*_*Lex 6 c++ serialization qt qvariant
我可能写错了,但这是我正在尝试执行的代码并且它无法执行预期的操作:
#include <QDataStream>
#include <QByteArray>
#include <QVariant>
#include <iostream>
int main(){
QByteArray data;
QDataStream ds(&data,QIODevice::WriteOnly);
QVariant v(123);
ds << v;
std::cout <<"test: " << data.data() << std::endl; // "test: 123"
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出QVariant类文档中的示例:
http://qt-project.org/doc/qt-5.1/qtcore/qvariant.html#type
它应该正确地将值123序列化到QByteArray但不这样做,而是只写出:
test:
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何解决这个问题?
编辑
好吧,也许不清楚,但这是原始问题:
我可能有任何存储在QVariant中的QVariant内置类型,如QStringList,QString,double,int等....
我想要的是一种将QVariant序列化为字符串并将其恢复而无需为每种类型自行完成的方法.据我所知,QVariant :: toString()方法不适用于通过QVariant接受的所有类型,我认为通过QDataStream传递可以传递给我一个QVariant的序列化版本.
编辑2
感谢piotruś的回答,我能够回答我的问题.这是程序:
int main(){
QString str;
{
//serialization
QByteArray data;
QDataStream ds(&data,QIODevice::WriteOnly);
QVariant v(123);
ds << v;
data = data.toBase64();
str = QString(data);
cout << str.toStdString() << endl;
}
{
//deserialization
QByteArray data = str.toLatin1();
data = QByteArray::fromBase64(data);
QDataStream ds(&data,QIODevice::ReadOnly);
QVariant v;
ds >> v;
cout << v.toInt() << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)