gpt4 book ai didi

c++ - 通过 QDataStream 序列化 QVariant

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:41 27 4
gpt4 key购买 nike

我可能写错了,但这是我试图执行的代码,但它失败了做预期的事情:

#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 中存储了任何 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;
}

最佳答案

QDataStream 不写入文本,它以指定的形式写入二进制数据 here .因此,您不应期望在字节数组中看到任何可打印字符,当然也不会看到数字的字符串表示形式。

QTextStream 用于写出文本,但它不直接与 QVariant 兼容。您需要编写自己的代码来测试变体包含的类型并写出适当的字符串。

关于c++ - 通过 QDataStream 序列化 QVariant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537186/

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