crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> сохранение контейнера объектов в файл
__ilya__
  опции профиля:
сообщение 21.8.2012, 11:25
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


есть некий класс или даже структура в которой есть несколько полей QStrinq, int, double
class Data
{
public:
    QString s1, s2, s3;
    int i1, i2, i3;
    double d1, d2, d3;
};

в другом классе будет контейнер таких объектов
class Widget:public QWidget
{
    Q_OBJECT
    
    QVector<Data>data;
};

я не привел конструктор и методы добавления, удаления объектов, для этого специальные слоты будут.

Собственно вопрос -как мне сохранить содержимое всего контейнера, из этих объектов в файл?
Да и из файла считывать, тоже надо

Сообщение отредактировал __ilya__ - 21.8.2012, 11:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 21.8.2012, 11:40
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Определи
QDataStream &operator<<(QDataStream &, const Data &);
QDataStream &operator>>(QDataStream &, Data &);
для своей структуры и записывай через QDataStream.

Сообщение отредактировал panter_dsd - 21.8.2012, 11:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 21.8.2012, 11:52
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


а может мне класс Data наследовать от QIODevice
или я что то не понимаю и несу полную чушь?

Сообщение отредактировал __ilya__ - 21.8.2012, 11:54
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 21.8.2012, 11:54
Сообщение #4


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Нет. Не путай структуру и поток.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 21.8.2012, 12:03
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


понял.
Но как мне перегрузить операторы >> и <<?
я вообще понятия не имею как и что они делать должны
Да и вообще не понятно как мне контейнер таких структур загружать?

Сообщение отредактировал __ilya__ - 21.8.2012, 12:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 21.8.2012, 12:15
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(__ilya__ @ 21.8.2012, 13:03) *
понял.
Но как мне перегрузить операторы >> и <<?
я вообще понятия не имею как и что они делать должны

QDataStream & operator << ( QDataStream & stream, const Data & value )
{
    return stream
        << value.s1
        << value.s2
        << value.s3
        << value.i1
        << value.i2
        << value.i3
        << value.d1
        << value.d2
        << value.d3;
}

QDataStream & operator >> ( QDataStream & stream, Data & value )
{
    return stream
        >> value.s1
        >> value.s2
        >> value.s3
        >> value.i1
        >> value.i2
        >> value.i3
        >> value.d1
        >> value.d2
        >> value.d3;
}


если определять члены, как приватные, то нужно еще определение

class Data
{
    friend QDataStream & operator << ( QDataStream & stream, const Data & value );
    friend QDataStream & operator >> ( QDataStream & stream, Data & value );

private:
    QString s1, s2, s3;
    int i1, i2, i3;
    double d1, d2, d3;
};


Цитата(__ilya__ @ 21.8.2012, 13:03) *
Да и вообще не понятно как мне контейнер таких структур загружать?


QDataStream stream( &device );

QVector< Data > contaner;

// чтение
stream
    >> contaner;

...

// запись
stream
    << contaner;


Сообщение отредактировал ssoft - 21.8.2012, 12:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 21.8.2012, 16:41
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


QDataStream & operator << ( QDataStream & stream, const Data & value )
{
    return stream
        << value.s1
        << value.s2
        << value.s3
        << value.i1
        << value.i2
        << value.i3
        << value.d1
        << value.d2
        << value.d3;
}

может я ошибаюсь, но по моему так перегружаются только дружественные ф-ции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 22.8.2012, 8:42
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(__ilya__ @ 21.8.2012, 17:41) *
может я ошибаюсь, но по моему так перегружаются только дружественные ф-ции.


Ошибаешься
Если члены класса имеют видимость public, то можно не указывать friend отношения.
Собственно, operator >>, << - это такие же обычные глобальные методы (функции), как и все остальные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 23.8.2012, 12:21
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(ssoft @ 22.8.2012, 9:42) *
Если члены класса имеют видимость public,

И часто такое бывает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 24.8.2012, 12:42
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


если я буду сохранять в файл в режиме WriteOnly, содержимое файла полностью перезапишется? тоесть то что было записано до этого не сохранится? по крайней мере у меня вроде так получается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 11:35