Frage

sagen, ich habe eine Struktur wie folgt aus:

class AAA
{
    BBB      bb_member;
    double   dbl_member;
    ....................
}

class BBB
{
    int             int_member;
    QString         QStr_member;

    .................
    QTextEdit       m_textEdit;
}

Und für AAA definiere ich diese Operatoren:

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;
}

Dann ist dies nenne ich:

QFile file("myFileName");
file.open(QIODevice::WriteOnly))
QDataStream out(&file);
out << AAA_object;

, um serialize AAA-Objekt in eine Datei.

Nun ist die Frage. Wie soll ich QDataStream Betreiber für BBB-Klasse, um zu serialisiert BBB Objekt (int, QString und QTextEdit Reichweite Textinhalt ), während Aufruf out << AAA_object definieren; ???

War es hilfreich?

Lösung 2

Ich habe bereits diese Aufgabe compleated. Ich habe die Bilder in einem QVector gespeichert. den Vektor und den HTML-Code serialisiert. Dann deserialisiert den Code und den QVector. Hinzugefügt alle Bilder als Ressource mit dieser Funktion:

for(int i = 0; i < vectorOfImages.size(); i++ )
{
    QUrl url(QString("image_%1").arg(i));
    textEdit->document()->addResource(QTextDocument::ImageResource, url,  vectorOfImages.at(i));
}

Dann führt die folgende

int count = 0;
int pos = 0;

QRegExp rx("<img src=\".+/>");
while ((pos = rx.indexIn(htmlCode, pos)) != -1)
{
    QString strToReplace(QString("<img src=\"image_%1\" />").arg(count));
    htmlCode.replace(pos, rx.matchedLength(), strToReplace);
    pos += rx.matchedLength();
    count++;
}

textEdit->setText(htmlCode);

Works fine! Und ich werde meine frühere Bewertung haben:)))

Andere Tipps

QTextEdit ist ein Widget, und es funktioniert nicht viel Sinn machen, ein Widget in eine Datei zu schreiben, aber wir können den Inhalt des Widgets (QTextEdit :: toHtml ()) in die Datei schreiben. Wenn aus einer Datei lesen, können wir ein neues Widget-Objekt erstellen und initialisieren es mit dem Inhalt der Datei (QTextEdit :: setHtml ()).

Ich muss hinzufügen, dass es wahrscheinlich ein besseres Design nur die rich Daten in BBB speichern würde (als html QString) in Bezug auf die QTextEdit selbst gegenüber.

Hier ist, was ich tun würde:

Erste (wie roop sagte), sollten Sie die QTextEdit nicht speichern Widget selbst, sondern das zugrunde liegende Textdokument (QTextDocument). Sie können es aus dem QTextEdit Widget erhalten mit QTextEdit :: document () .

QTextDocument* pTextDoc = m_textEdit->document();

Dann würde ich die HTML-Zeichenfolge aus diesem Dokument erhalten und aus dieser Zeichenfolge, erhalte eine QByteArray:

QString MyText = pTextDoc->toHtml();
QByteArray TextAsByteArray = MyText.toUtf8();

Wenn Sie ein QByteArray Objekt mit Ihrem Dokument haben, können Sie die >> Betreiber.

Für die QByteArray Lesen zurück, speichern Sie es in eine QString (siehe QString :: fromUtf8 ( )), und verwenden Sie QTextDocument :: setHtml () Anzeige der Inhalt in das QTextEdit Widget.

UPDATE

Nach jpalecek Kommentar, ich bin overcomplicating die Lösung. Sobald Sie eine QString mit Ihrem Textdokument als HTML haben, können Sie QString :: operator << () und QString: :. Operator >> () ohne QByteArray mit

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top