Russian Qt Forum

Qt => Общие вопросы => Тема начата: qteshnik от Октябрь 04, 2011, 08:05



Название: чтение и запись бинарного файла
Отправлено: qteshnik от Октябрь 04, 2011, 08:05
Возможно ли записать объект(объект содержит поля и гетеры/сетеры на них) в бинарный файл, что каждое поле в ручную не записывать.


Название: Re: чтение и запись бинарного файла
Отправлено: qteshnik от Октябрь 04, 2011, 08:50
прочитал тут, что можно использовать QDataStream  перегружая операторы <<и>> для своих пользовательских типов, так что думаю вопрос снят


Название: Re: чтение и запись бинарного файла
Отправлено: qteshnik от Октябрь 04, 2011, 11:40
правда реализовать не получилось
вот пользовательский класс
Код
C++ (Qt)
class UserInfo
{
public:
   UserInfo();
   void setUserName(QString name);
   QString getUserName();
private:
   QString name;
};
QDataStream &operator<<(QDataStream &out, const UserInfo &UserInfo);
QDataStream &operator>>(QDataStream &in, const UserInfo &UserInfo);
#endif // USERINFO_H
вот реализация перегруженного метода
Код
C++ (Qt)
......................
QDataStream &operator << (QDataStream &out, const UserInfo &painting){
   out << painting.getUserName();
   return out;
.....................
}

теперь мне нужно к примеру из некого класса записать и прочитать данные(UserInfo) в файл, а вот как не понял, подскажите.


Название: Re: чтение и запись бинарного файла
Отправлено: Пантер от Октябрь 04, 2011, 11:44
Код
C++ (Qt)
QDataStream stream;
................
UserInfo info;
................
stream << info;
 


Название: Re: чтение и запись бинарного файла
Отправлено: qteshnik от Октябрь 04, 2011, 12:01
Код
C++ (Qt)
QDataStream stream;
................
UserInfo info;
................
stream << info;
 
хм странно мне говорит
ошибка: no match for ‘operator>>’ in ‘stream >> UserInfo::getInstance()’
забыл сказать что класс UserInfo singleton поэтому  UserInfo::getInstance(), ну думаю дело не в этом


Название: Re: чтение и запись бинарного файла
Отправлено: Igors от Октябрь 04, 2011, 12:17
прочитал тут, что можно использовать QDataStream  перегружая операторы <<и>> для своих пользовательских типов, так что думаю вопрос снят
Так или иначе записывать каждое поле придется (и экономить на этом будет себе дороже), просто операторы позволят сделать это лучше. Напр. если у Вас член класса стандартный Qt тип, то можно воспользоваться уже готовыми для него операторами. 

Если Вы надеетесь дожить до версии 2.0 (или хотя бы 1.5) - не забудьте записать версии своих структур