Невозможно сериализовать QHash в DataStream

опираясь на 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: ошибка: нет совпадения для «оператор>>» в «в >> k»

Я не могу исправить это.. Я делаю что-то не так?? Как я могу это исправить?


person Jis    schedule 03.08.2012    source источник


Ответы (1)


Проблема в том, что нет операторов QDataStream для QLocale::Language. При потоковой передаче это работает, потому что он автоматически преобразуется в целочисленный тип. Он не может сделать это для потоковой передачи. Поэтому вам нужно будет либо изменить свой QHash, чтобы использовать другой параметр шаблона для ключа, либо написать операторы потоковой передачи для QLocale::Language (что должно быть тривиально, вам просто нужно преобразовать его в/из int ).

person Dan Milburn    schedule 03.08.2012