Say I have a structure like this:
class AAA
{
BBB bb_member;
double dbl_member;
....................
}
class BBB
{
int int_member;
QString QStr_member;
.................
QTextEdit m_textEdit;
}
And for AAA I define this operators:
QDataStream &operator<<(QDataStream &out, const AAA &aa)
{
out << aa.bb_member
<< aa.dbl_member;
return out;
}
QDataStream &operator>>(QDataStream &in, AAA &aa)
{
BBB bb_memb;
double dbk_memb;
in >> bb_memb
>> dbk_memb;
aa = AAA(bb_memb, dbk_memb);
return in;
}
Then I call this:
QFile file("myFileName");
file.open(QIODevice::WriteOnly))
QDataStream out(&file);
out << AAA_object;
in order to serialize AAA object to a file.
Now the question. How I should define QDataStream operators for BBB class in order to serialize BBB object (int, QString and QTextEdit reach text content), while calling out << AAA_object; ???
QTextEdit is a widget, and it doesnt make much sense to write a widget to a file, but we can write the content of the widget (QTextEdit::toHtml()) to the file. When reading from file, we can create a new widget object and initialize it with the contents of the file (QTextEdit::setHtml()).
I must add that it would probably be a better design to store just the richtext data in BBB (as a html QString) as opposed to the QTextEdit itself.
I have already compleated this task. I have saved the images in a QVector. Serialized the vector and the HTML code. Then deserialized the code and the QVector. Added all the images as a resource with this function:
Then Does the following
Works fine! And I will have my former rating :)))!
Here is what I would do :
First (as roop said), you shouldn't store the
QTextEdit
widget itself, but the underlying text document (QTextDocument
). You can get it from theQTextEdit
widget with QTextEdit::document().Then, I would get the html string from this document and from this string, get a
QByteArray
:Once you have a
QByteArray
object containing your document, you can use the << and >> operators.For reading back the
QByteArray
, store it into aQString
(see QString::fromUtf8()), and use QTextDocument::setHtml() to display the content into theQTextEdit
widget.UPDATE
Following jpalecek comment, I'm overcomplicating the solution. Once you have a
QString
containing your text document as HTML, you can use QString::operator<<() and QString::operator>>() without using aQByteArray
.