我正在尝试序列化一个 QHash 对象并将其存储在 QByteArray 中(使用 QUDPSocket 或 QTCPSocket 发送)。
我目前的尝试是这样的:
// 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();
关于qt - 将 QHash 序列化为 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472128/