Qt - сериализация / десериализация текста и изображения
Я хочу использовать поле (вроде QTextEdit), которое является способным хранить изображение и текст (как это делает MS Word), и оно сериализует и десериализует данные изображения + текста. Есть ли какой-нибудь виджет Qt, который позволяет нам одновременно манипулировать изображением и текстом, и он имеет функции set / get, которые работают с сериализуемым типом? Другими словами, я хочу знать, существует ли какой-либо виджет Qt, который может хранить картинку + текст и имеет функцию "get" типов, которая возвращает содержимое редактируемой области этого виджета, которая представляет собой тип, который можно сериализовать с QDataStream.
3 ответа
Я хотел бы создать структуру данных, которая содержит текст и изображение для вас. Затем вы можете использовать эту структуру данных (или объект) в вашем отображаемом виджете. Это позволяет вам сериализовать ваши данные, не пытаясь сериализовать виджет, что, вероятно, не то, что вы хотите.
Для сериализации я бы рекомендовал вам взглянуть на QDataStream.
Следующие сообщения предоставляют некоторые подробности о QDataStream:
Перегрузка операторов QDataStream << и >> для пользовательского типа
Я не думаю, что есть что-то, что удовлетворит все ваши потребности.
Для отображения текста + изображений вы можете использовать QTextEdit, который способен отображать довольно богатое подмножество HTML. По сути, QTextEdit позволяет вам читать и редактировать объект QTextDocument, это, по сути, то, что вы хотите сериализовать и десериализовать.
Но, насколько я знаю, по умолчанию нет реализации сериализации для QTextDocument. Я видел запрос на эту функцию, но кто знает, когда она будет реализована: http://bugreports.qt-project.org/browse/QTBUG-9258
Редактировать 1: Реализация сериализации / десериализации QTextDocument не должна быть слишком сложной, потому что все строительные блоки QTextDocument являются сериализуемыми. Изображения хранятся в QTextDocument и доступны как QVariants, сам html - это просто строка, поэтому он не должен быть слишком сложным, чтобы обернуть все вместе.