请教QDatastream与QVariant的相关问题(QT编程)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教QDatastream与QVariant的相关问题(QT编程)相关的知识,希望对你有一定的参考价值。

QVariant V("123");
QByteArray b("321");
QDataStream o(&b,QIODevice::ReadWrite);
o << V;
cout<<" b:"<<b.data()<<endl;
cout<<" V:"<<V.toByteArray().data()<<endl;
我想问下为什么b输出为空?

参考技术A

1、如果将cout换为二进制文件QFile(或者查看调试时的变量b值),

    QFile file("file.dat");
    file.open(QIODevice::WriteOnly);    
    QDataStream out(&file);
    out<<V;    
    file.close();

那么会发现输出的结果是\\0 \\0 \\0 \\n \\0 \\0 \\0 \\0 6 \\0 '1' \\0 '2' \\0 '3'.

2、如果将o << V;替换为o << V.toByteArray();,那么结果为\\0 \\0 \\0 \\0 3 '1' '2' '3'.

3、如果直接将V输出到控制台上,显示结果为QVariant(QString, "123");

 

所以,推测为QVariant具有独特的内存结构,如果直接以QByteArray将其内存数据输出到控制台,由于内存格式仍为QVariant的内存结构,所以控制台上不能显示出来。

 

不过,再具体的就说不上来了,查看QVariant类定义,也没有发现为什么会有\\0 \\0 \\0 \\n等这样的数据。希望高手解答啊。

以上是关于请教QDatastream与QVariant的相关问题(QT编程)的主要内容,如果未能解决你的问题,请参考以下文章

QVariant 反序列化给出无效值

(反)序列化 QSet 与枚举使用 QDataStream

如何将 QVariant::fromValue 与 QString 一起使用?

有没有办法将 QVariant 与 QVector 一起使用?

使用 QDataStream 序列化自定义类导致 C2679 错误

6.5 QDataStream串行化数据流处理