qt - 将 QHash 序列化为 QByteArray

标签 qt serialization qt4 tcp udp

我正在尝试序列化一个 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/

相关文章:

qt - 如何在Qt中将一个小部件放置在另一个上

xcode - 在构建qt项目时“no such sysroot directory”

qt - CMake 找不到 Qt5QuickCompiler

qt - 如何在 PCL(使用 Qt)中可视化一系列 TOF 传感器数据?

c++ - Boost:在单独的加载/保存函数中非侵入式地序列化一个类

python - 无法发送另一个线程中对象的已发布事件

qt - 如何在 Gridview 中创建间距

c# - 使用 DataContractSerializer 序列化和反序列化多个对象

xml - 如何格式化/缩进 XSL 转换的输出

qt4 - QTableView 项的 "editing finished"信号是什么?