Сериализация QMap в Qt - PullRequest
       1

Сериализация QMap в Qt

2 голосов
/ 19 марта 2011

У меня есть 2 класса: valueNode и keyNode.Оба из этих классов имеют 2 частных члена.Теперь я создаю QMap< keyNode , valueNode >.для этого я переопределяю operator<().Я хочу сериализовать этот QMap, но не знаю как.

Ответы [ 2 ]

7 голосов
/ 21 марта 2011
QMap<QString, QString> map;
map.insert("Hello", " World!");

QByteArray data;
QDataStream * stream = new QDataStream(&data, QIODevice::WriteOnly);

(*stream) << map;
delete stream;

// Now QByteArray should have the map as serialized data.

Это должно работать.

Вы можете задаться вопросом о безумии new и delete , но есть причина: нет способа сбросить данные из потока в bytearray, кроме как путем деконструкции поток. Или, может быть, дайте мне комментарий, если я ошибаюсь.

Edit:

Ах да, забыл одну вещь.

Вам необходимо выполнить следующие функции:

QDataStream & operator << (QDataStream & out, const MyClass & object);
QDataStream & operator >> (QDataStream & in, MyClass & object);

Введите их в заголовки ваших классов и внедрите в файл cpp этого класса.

// MyClass.h

MyClass
{
    ...
};

QDataStream & operator << ...
QDataStream & operator >> ...

Обратите внимание, что это должна быть глобальная функция, а не функция-член.

Обратите внимание, что вы должны создать пару для каждого из ваших классов.

0 голосов
/ 21 марта 2011

Сохраните его в QVariant, который затем вы можете использовать QDataStream для чтения / записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...