Qt - сериализация / десериализация текста и изображения

Я хочу использовать поле (вроде QTextEdit), которое является способным хранить изображение и текст (как это делает MS Word), и оно сериализует и десериализует данные изображения + текста. Есть ли какой-нибудь виджет Qt, который позволяет нам одновременно манипулировать изображением и текстом, и он имеет функции set / get, которые работают с сериализуемым типом? Другими словами, я хочу знать, существует ли какой-либо виджет Qt, который может хранить картинку + текст и имеет функцию "get" типов, которая возвращает содержимое редактируемой области этого виджета, которая представляет собой тип, который можно сериализовать с QDataStream.

3 ответа

Решение

Я хотел бы создать структуру данных, которая содержит текст и изображение для вас. Затем вы можете использовать эту структуру данных (или объект) в вашем отображаемом виджете. Это позволяет вам сериализовать ваши данные, не пытаясь сериализовать виджет, что, вероятно, не то, что вы хотите.

Для сериализации я бы рекомендовал вам взглянуть на QDataStream.

Следующие сообщения предоставляют некоторые подробности о QDataStream:

Сериализация с Qt

Перегрузка операторов QDataStream << и >> для пользовательского типа

Чтение / запись QObject

Я не думаю, что есть что-то, что удовлетворит все ваши потребности.

Для отображения текста + изображений вы можете использовать QTextEdit, который способен отображать довольно богатое подмножество HTML. По сути, QTextEdit позволяет вам читать и редактировать объект QTextDocument, это, по сути, то, что вы хотите сериализовать и десериализовать.

Но, насколько я знаю, по умолчанию нет реализации сериализации для QTextDocument. Я видел запрос на эту функцию, но кто знает, когда она будет реализована: http://bugreports.qt-project.org/browse/QTBUG-9258

Редактировать 1: Реализация сериализации / десериализации QTextDocument не должна быть слишком сложной, потому что все строительные блоки QTextDocument являются сериализуемыми. Изображения хранятся в QTextDocument и доступны как QVariants, сам html - это просто строка, поэтому он не должен быть слишком сложным, чтобы обернуть все вместе.

Другие вопросы по тегам