Domanda

Dire di avere una struttura di questo tipo:

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

class BBB
{
    int             int_member;
    QString         QStr_member;

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

E per AAA posso definire questo di operatori:

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

Allora io chiamo questo:

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

per serializzare AAA oggetto di un file.

Ora la domanda.Come dovrei definire QDataStream operatori per BBB classe per serializzare BBB oggetto (di tipo int, QString e QTextEdit raggiungere il contenuto del testo), durante la chiamata fuori << AAA_object; ???

È stato utile?

Soluzione 2

Ho già compleated questo compito.Ho salvato le immagini in un QVector.Serializzato il vettore e il codice HTML.Quindi deserializzare il codice e il QVector.Aggiunto tutte le immagini come una risorsa con questa funzione:

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

Quindi Esegue le operazioni seguenti

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

Funziona bene!E avrò il mio ex rating :)))!

Altri suggerimenti

QTextEdit è un widget, e non ha molto senso scrivere un widget di un file, ma siamo in grado di scrivere il contenuto del widget (QTextEdit::toHtml()) per il file.Durante la lettura dal file, è possibile creare un nuovo oggetto e la inizializza con il contenuto del file (QTextEdit::setHtml()).

Devo aggiungere che sarebbe probabilmente un design migliore per conservare il richtext dati in BBB (come html QString) rispetto alle QTextEdit stesso.

Ecco cosa vorrei fare :

Prima (come roop detto), non si deve memorizzare il QTextEdit widget di per sé, ma il sottostante documento di testoQTextDocument).Si può ottenere dalla QTextEdit widget con QTextEdit::document().

QTextDocument* pTextDoc = m_textEdit->document();

Quindi, vorrei ottenere la stringa html da questo documento e da questa stringa, ottenere un QByteArray :

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

Una volta che si dispone di un QByteArray oggetto contenente il documento, è possibile utilizzare il << e >> operatori.

Per la lettura che il QByteArray, da conservare in un QString(vedere QString::fromUtf8()), e l'uso QTextDocument::setHtml() per visualizzare il contenuto in QTextEdit widget.

AGGIORNAMENTO

Seguenti jpalecek il commento, sono overcomplicating soluzione.Una volta che si dispone di un QString contenente i documenti di testo come HTML, è possibile utilizzare QString::operator<<() e QString::operator>>() senza l'utilizzo di un QByteArray.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top