Russian Qt Forum
Ноябрь 27, 2024, 03:26
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Запись в файл объектов
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Запись в файл объектов (Прочитано 9751 раз)
RoS
Гость
Запись в файл объектов
«
:
Февраль 28, 2010, 15:56 »
Здравствуйте товарищи форумчане!
Есть такой вопрос - в С++ я мог взять объект класс и записать его в двоичный файл примерно такой конструкцией - имена классические
Код:
file.write(reinterpret_cast<char*>(&myObj), sizeof(myClass));
ВОт, потом читая из файла аналогичной конструкцией read получал объект точно такой же, какой записал.
Собстно сабж - как вообще это выглядит с точки зрения Qt, чем, если это надо, необходимо заменить такую конструкцию...
И еще - можно ли записать объект, если в нем есть QString - строки же хранятся в памяти динамически, ответ нет, так? И мне следует использовать по старинке массив Символов. который отлично запишется в файл и прочтется из него? или есть другой способ?
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Запись в файл объектов
«
Ответ #1 :
Февраль 28, 2010, 16:57 »
QDataStream
Записан
Юра.
RoS
Гость
Re: Запись в файл объектов
«
Ответ #2 :
Февраль 28, 2010, 17:27 »
Я уже обращался к этому классу, не совсем понятно все же, как мне его использовать - повторю задачу:
запиать объект, содержащий текстовую информацию в файл в бинарном режиме, затем прочитать его снова в объект, а из объекта получить доступ к тексту
Записан
SABROG
Гость
Re: Запись в файл объектов
«
Ответ #3 :
Февраль 28, 2010, 17:46 »
Как раз этот класс и умеет это делать. Просто нужно примеры изучить и внимательней почитать. Ну и гугл не последний источник информации, возможно даже первый.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Запись в файл объектов
«
Ответ #4 :
Февраль 28, 2010, 17:48 »
>>Ну и гугл не последний источник информации, возможно даже первый.
Зачем далеко ходить, тут на форуме есть пример применения этого класса, название класса нужно использовать, как ключевое слово для поиска
Записан
Юра.
SABROG
Гость
Re: Запись в файл объектов
«
Ответ #5 :
Февраль 28, 2010, 17:58 »
Цитата: lit-uriy от Февраль 28, 2010, 17:48
>>Ну и гугл не последний источник информации, возможно даже первый.
Зачем далеко ходить, тут на форуме есть пример применения этого класса, название класса нужно использовать, как ключевое слово для поиска
А там 10 примеров на 10 форумах
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись в файл объектов
«
Ответ #6 :
Март 02, 2010, 03:28 »
Цитата: RoS от Февраль 28, 2010, 15:56
Есть такой вопрос - в С++ я мог взять объект класс и записать его в двоичный файл примерно такой конструкцией - имена классические
Код:
file.write(reinterpret_cast<char*>(&myObj), sizeof(myClass));
ВОт, потом читая из файла аналогичной конструкцией read получал объект точно такой же, какой записал.
Это не будет работать для объектов имеющих виртуальные методы (указатель на VMT в sizeof входит и при чтении будет затерт). Поскольку в Qt практически все объекты с virtual - это не будет работать в Qt, надо использовать QDataStream и операторы >> и <<, сделано очень удобно.
Записан
SASA
Гость
Re: Запись в файл объектов
«
Ответ #7 :
Март 02, 2010, 11:15 »
Поищи по слову "cериализация". В qt нет встроеного механизма cериализации. Его надо реализовывать самому. Например, в нашем проекте объект хранинит информацию о себе в доме. Можно у него этот дом запросить, а потом создать по нему идентичный объект.
Записан
SABROG
Гость
Re: Запись в файл объектов
«
Ответ #8 :
Март 02, 2010, 12:47 »
Цитата: SASA от Март 02, 2010, 11:15
Поищи по слову "cериализация". В qt нет встроеного механизма cериализации. Его надо реализовывать самому. Например, в нашем проекте объект хранинит информацию о себе в доме. Можно у него этот дом запросить, а потом создать по нему идентичный объект.
Почти все стандартные типы Qt сериализуются. Я недавно писал сериализатор своей структуры для QDataStream, благо в ней все типы были Qt'шными и все свелось к простой отправке почленово в стрим. И в той же последовательности, чтобы прочитать. Пишется на коленке за 5 минут.
Записан
SASA
Гость
Re: Запись в файл объектов
«
Ответ #9 :
Март 03, 2010, 18:39 »
Цитата: SABROG от Март 02, 2010, 12:47
Почти все стандартные типы Qt сериализуются.
Я говорю, что нет общего, уневерсального способа.
Цитировать
все свелось к простой отправке почленово в стрим
Для простых структур это самое правильное решение. Но есть задачи немного сложнее
«
Последнее редактирование: Март 03, 2010, 18:41 от SASA
»
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Запись в файл объектов
«
Ответ #10 :
Март 09, 2010, 14:55 »
Цитировать
В qt нет встроеного механизма cериализации.
ложь, он есть и достаточно правильный
Цитировать
Я говорю, что нет общего, уневерсального способа.
любой универсальный способ не на уровне языка внесет большой оверхед т.к. прийдется наследоваться от какого-0то базового класса кот. будет уметь сохранять себя - на форуме были примеры и ссылки на наследника QObject который мог сохранять все сове проперти. Свой класс нужно было только унаследовать от этого базового класса. Но мне кажется это не лучший подход т.к. большой оверхед...
Цитировать
Для простых структур это самое правильное решение. Но есть задачи немного сложнее
Для любой сложной структуры можно переопределить операторы << и >> для работы с QDataStream, причем эти операторы будут частью этой структуры а не частью QDataStream.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись в файл объектов
«
Ответ #11 :
Март 09, 2010, 15:30 »
Цитата: break от Март 09, 2010, 14:55
... он есть и достаточно правильный
После таких выпадов дальнейшее обсуждение обычно сваливается в перетирание эмоций которые никому не интересно читать. Разве трудно было сказать то же но по-другому? И это легко исправить
Записан
SASA
Гость
Re: Запись в файл объектов
«
Ответ #12 :
Март 10, 2010, 14:41 »
Цитата: break от Март 09, 2010, 14:55
ложь, он есть и достаточно правильный
Объясните в чём он состоит.
Цитировать
Для любой сложной структуры можно переопределить операторы << и >> для работы с QDataStream, причем эти операторы будут частью этой структуры а не частью QDataStream.
Это я и имел ввиду под словами "Его надо реализовывать самому". Причём это один из способов (возможно самый удобный
)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...