Qt QMetaType сериализация пользовательских типов и QVariant - PullRequest
0 голосов
/ 20 апреля 2011

Я хочу получить доступ к методике сериализации, используемой QSettings и QVariant. Например, если вы создаете объект QRect и сохраняете его в INI-файл с помощью QSettings, вы получаете строку, которая выглядит следующим образом:

value=@Rect(1 2 3 4)

Большинство стандартных и пользовательских типов Qt имеют сходный формат сериализации строк для сохранения / загрузки. Как я могу сделать то же самое?

То есть у меня есть QVariant, и я хочу сохранить содержащиеся в нем данные, а затем загрузить их обратно. Сохраненная форма должна содержать текстовые данные (как указано выше), чтобы их можно было использовать в обычных конфигурационных файлах (например, INI) или реестре.


Хм, я посмотрел исходный код QSettings, и он просто жестко запрограммирован для некоторых распространенных типов, а затем использовал QDataStream для остальных. Это означало бы, что нет общего способа сериализации данных в текстовой форме.

1 Ответ

0 голосов
/ 20 апреля 2011

Класс QDataStream обеспечивает сериализацию двоичных данных в QIODevice.Вы должны реализовать два оператора:

QDataStream & operator<< ( QDataStream & stream, const YourClass & yourObject ); QDataStream & operator>> ( QDataStream & stream, YourClass & yourObject );

, которые будут отвечать за сериализацию и десериализацию данных.

Подробнее о сериализации в Qt

Если вы заинтересованы в сериализации текста, вам следует выбрать QTextStream в качестве инструмента.Однако большинство классов не имеют операторов, способных обрабатывать текстовые потоки, поэтому вам придется их реализовывать.

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