Qt 无法将QHash序列化为数据流

Qt 无法将QHash序列化为数据流,qt,qhash,Qt,Qhash,在学习QHash并将QHash序列化到DataStream时,我发现以下代码有一个错误 typedef QHash <quint32,QString> hashtype1; typedef QHash <QLocale::Language,hashtype1> hashtype; hashtype1 hash; hash.insert(1, "Key1"); hash.insert(2, "Key2"); hashtype hash1; hash1.insert(QL

在学习QHash并将QHash序列化到DataStream时,我发现以下代码有一个错误

typedef QHash <quint32,QString> hashtype1;
typedef QHash <QLocale::Language,hashtype1> hashtype;

hashtype1 hash;
hash.insert(1, "Key1");
hash.insert(2, "Key2");

hashtype hash1;
hash1.insert(QLocale::English, hash);
hash1.insert(QLocale::French, hash);

QByteArray ba;
QByteArray ba1;
QDataStream ds(&ba, QIODevice::ReadWrite);
QDataStream ds1(&ba1, QIODevice::ReadWrite);
ds << hash;
ds1 << hash1;

qDebug() << ds.device()->readAll();
ds.device()->reset();
ds1.device()->reset();

hashtype1 hashcopy;
ds >> hashcopy;

hashtype hash1copy;
ds1 >> hash1copy;
typedef QHash hashtype1;
typedef-QHash-hashtype;
hashtype1散列;
散列。插入(1,“键1”);
散列。插入(2,“键2”);
hashtype hash1;
hash1.insert(QLocale::English,hash);
hash1.insert(QLocale::French,hash);
QByteArray ba;
QByteArray ba1;
QDataStream ds(&ba,QIODevice::ReadWrite);
QDataStream ds1(&ba1,QIODevice::ReadWrite);
ds-reset();
哈希类型1哈希副本;
ds>>散列拷贝;
哈希类型哈希1副本;
ds1>>哈希1副本;
最后一个语句给出了一个错误,即 /usr/include/qt4/QtCore/qdatastream.h:362:错误:与“in>>k”中的“operator>>”不匹配

我无法纠正这一点。。 我做错什么了吗??
如何更正此问题?

问题在于
QLocale::Language
没有
QDataStream
运算符。当流式输出时,它会工作,因为它会自动转换为整数类型。它无法为流式输入执行此操作。因此,您需要更改
QHash
以对键使用不同的模板参数,或者为
QLocale::Language
编写流式操作符(这应该很简单,您只需要将其转换为int或从int转换)