无法将哈希序列化为DataStream

时间:2012-08-03 13:29:37

标签: 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(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;

最后一句话是说错误 /usr/include/qt4/QtCore/qdatastream.h:362:错误:'in&gt;&gt;中的'运算符&gt;&gt;'不匹配K”

我无法纠正这个.. 我做错了吗? 我怎么能纠正这个?

1 个答案:

答案 0 :(得分:1)

问题在于QDataStream没有QLocale::Language个运算符。当流出时,这是有效的,因为它会自动转换为整数类型。它不能用于流式传输。因此,您需要更改QHash以使用不同的模板参数作为密钥,或者为QLocale::Language编写流式运算符(这应该是微不足道的,你只需要需要将它强制转换为int)。