我可能写错了,但这是我尝试执行的代码,它未能达到预期的效果:
#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;
}
鉴于QVariant类文档中的示例:
http://qt-project.org/doc/qt-5.1/qtcore/qvariant.html#type
它应该将值123正确地序列化为QByteArray,但它没有这样做,而是仅写出:test:
有人知道如何解决这个问题吗?
编辑
好吧,也许不是很清楚,但这就是原始问题:
我可能在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;
}