Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt4] Сериализация пользовательского объекта 
:(
    Опции темы
Artemon
Дата 13.12.2011, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Вот пример класса, который можно записать в файл, передать по сети и т.д.
Если поля класса - тоже сложные объекты, то с ними можно поступить точно также.

Базовый класс:

Код

struct IStreamSupport
{
    // Чертпобери, чтобы объекты корректно удалялись, необъодимо чтобы деструктор был виртуальным
    virtual ~IStreamSupport(){};

    virtual QDataStream& put(QDataStream& os)const = 0;
    virtual QDataStream& get(QDataStream& is) = 0;

    friend inline QDataStream& operator<<(QDataStream& os, const IStreamSupport* b);
    friend inline QDataStream& operator>>(QDataStream& is, IStreamSupport* b);
};

inline QDataStream& operator<<(QDataStream& os, const IStreamSupport* b) 
{
    return b->put(os);
}

inline QDataStream& operator>>(QDataStream& is, IStreamSupport* b)
{
    return b->get(is);
}


Производный класс
Код

struct SServerNetworkPrivate : public IStreamSupport
{

    virtual QDataStream& put(QDataStream& os)const
    {
        SBaseServerSettings::put(os);

        os << Port;
        os << PortSecond;

        return os;
    }

    virtual QDataStream& get(QDataStream& is)
    {
        SBaseServerSettings::get(is);

        is >> Port;
        is >> PortSecond;

        return is;
    }

    int Port;    // Порт, первого канала, который прослушивает сервер
    int PortSecond; // Порт второго канала, который прослушивает сервер
};


При таком подходе можешь проводить сериализацию полиморфных классов.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.