我正在尝试序列化qhash对象并将其存储在qbytearray中(使用qdpsocket或qtcsocket发送)。
我目前的尝试是这样的:
// main.cpp
#include <QtCore/QCoreApplication>
#include <QHash>
#include <QVariant>
#include <QDebug>
int main(int argc, char *argv[])
{
QHash<QString,QVariant> hash;
hash.insert("Key1",1);
hash.insert("Key2","thing2");
QByteArray ba;
QDataStream ds(&ba, QIODevice::WriteOnly);
ds << hash;
qDebug() << ds;
}
当这个运行时,我从
qDebug()
中得到这个:QIODevice::read: WriteOnly device
QIODevice::read: WriteOnly device
QIODevice::read: WriteOnly device
QVariant(, )
documentation表示这应该写入字节数组,但显然这不是在这里发生的。我做错什么了?
OS-X上的Qt 4.7.1
谢谢!
-J
最佳答案
失败的原因是它试图从只写流中读取。顺序是:
qDebug() << ds;
--> QVariant::QVariant(QDataStream &s)
--> QDataStream& operator>>(QDataStream &s, QVariant &p)
--> void QVariant::load(QDataStream &s)
最后一种方法(以及一些更下游的方法)尝试从数据流中读取数据,将其内容转换为
QVariant
以便在qDebug
中显示。换句话说,您的实际代码是正确的;调试检查导致了失败。您可以使用如下内容检查字节数组的内容:
qDebug() << ba.length() << ba.toHex();