Auf dieser Seite

Qt-Serialisierung

Der Zweck der Serialisierung besteht darin, den Zustand eines Objekts zu speichern, um es bei Bedarf wiederherstellen zu können. Damit können Sie beispielsweise folgende Aktionen durchführen:

  • Das Objekt mithilfe eines Webdienstes an eine Remote-Anwendung senden
  • Das Objekt als JSON- oder XML-Zeichenkette übergeben
  • Speichern und Wiederherstellen von Benutzerinformationen oder deren Austausch zwischen Anwendungen

Die Qt-API bietet Unterstützung für die Serialisierung in verschiedenen Anwendungsfällen:

  • Die JSON-Unt erstützung in Qt bietet eine benutzerfreundliche C++-API zum Parsen, Ändern und Speichern von JSON-Daten. Die CBOR-Unterstützung in Qt ist eine kompakte Form der binären Datenkodierung, die eine Obermenge von JSON darstellt.
  • QDataStream bietet die Serialisierung binärer Daten in ein QIODevice
  • Qt XML C++ Classes bietet C++-Implementierungen der XML-Streaming - und DOM-Standards für XML
  • CBOR ist die Qt-Implementierung des CBOR-Serialisierungsformats.
  • QSettings bietet eine Möglichkeit zur Serialisierung und Speicherung plattformunabhängiger Anwendungseinstellungen.

Vorteile von JSON und CBOR

Bei der Verwendung von JSON werden die Informationen in einem „ QJsonObject “ gespeichert, und ein „ QJsonDocument “ sorgt dafür, dass die Werte in ein „ QByteArray “ gestreamt werden.

Beispielsweise

QJsonObject jobject;
jobject["SensorID"] = m_id;
jobject["AmbientTemperature"] = m_ambientTemperature;
jobject["ObjectTemperature"] = m_objectTemperature;
jobject["AccelerometerX"] = m_accelerometerX;
jobject["AccelerometerY"] = m_accelerometerY;
jobject["AccelerometerZ"] = m_accelerometerZ;
jobject["Altitude"] = m_altitude;
jobject["Light"] = m_light;
jobject["Humidity"] = m_humidity;
QJsonDocument doc( jobject );

return doc.toJson();

JSON bietet mehrere Vorteile:

  • Textbasiertes JSON ist deklarativ, was es für Menschen lesbar macht
  • Die Informationen sind strukturiert
  • Der Austausch generischer Informationen ist einfach
  • JSON ermöglicht die Erweiterung von Nachrichten um zusätzliche Werte
  • Es gibt zahlreiche Lösungen zum Empfangen und Parsen von JSON in cloudbasierten Lösungen

CBOR steht für „Concise Binary Object Representation“ und ist eine sehr kompakte Form der binären Datenkodierung, die eine Obermenge von JSON darstellt. Es wurde von der IETF-Arbeitsgruppe „Constrained RESTful Environments“ (CoRE) entwickelt und kommt in vielen neuen RFCs zum Einsatz. CBOR bietet viele der Vorteile von JSON, opfert jedoch zugunsten der Kompaktheit die Lesbarkeit für Menschen.

Vorteile der QDataStream-Klassen

QDataStream ist eine sinnvolle Option, wenn der gesamte Datenfluss festgelegt ist und sich nicht ändern wird. Zudem müssen sowohl der Leser als auch der Schreiber der Daten in Qt geschrieben sein.

Um eine Klasse um diese Unterstützung zu erweitern, sind zwei zusätzliche Operatoren erforderlich. Beispielsweise für eine Klasse namens `SensorInformation`:

QDataStream &operator<<(QDataStream &, const SensorInformation &);
QDataStream &operator>>(QDataStream &, SensorInformation &);

Die Implementierung für die Serialisierung ist unten dargestellt:

QDataStream &operator<<(QDataStream &out, const SensorInformation &item)
{
    QDataStream::FloatingPointPrecision prev = out.floatingPointPrecision();
    out.setFloatingPointPrecision(QDataStream::DoublePrecision);
    out << item.m_id
        << item.m_ambientTemperature
        << item.m_objectTemperature
        << item.m_accelerometerX
        << item.m_accelerometerY
        << item.m_accelerometerZ
        << item.m_altitude
        << item.m_light
        << item.m_humidity;
    out.setFloatingPointPrecision(prev);
    return out;
}

Die Deserialisierung funktioniert ähnlich, verwendet jedoch den Operator ` >> `. Zum Beispiel: ` out >> item.m_id` usw.

In der Regel ist die Verwendung von „ QDataStream “ schneller als die Verwendung von textuellem JSON.

Vorteile von C++-Klassen mit „ Qt XML “

Qt stellt sowohl DOM-Klassen als auch streambasierte Klassen zum Lesen und Schreiben von XML-Inhalten bereit.

Qt stellt die Klasse „ QDomDocument “ bereit, die das XML-Dokument repräsentiert, sowie zwei Klassen zum Lesen und Schreiben von XML über eine einfache Streaming-API: „ QXmlStreamReader “ und „ QXmlStreamWriter “.

Die DOM-XML-Klassen

QDomDocument repräsentiert das gesamte XML-Dokument. Sie ist die Wurzel des Dokumentbaums und bietet den primären Zugriff auf die Daten des Dokuments.

Die streambasierten XML-Klassen

Ein Stream-Reader gibt ein XML-Dokument als Strom von Tokens wieder. Dies unterscheidet sich von SAX, da SAX-Anwendungen Handler bereitstellen, um XML-Ereignisse vom Parser zu empfangen, während der „ QXmlStreamReader “ die Schleife steuert und Tokens bei Bedarf vom Reader abruft. Dieser „Pulling“-Ansatz ermöglicht die Erstellung rekursiver Abwärtsparser, wodurch der XML-Parsing-Code in verschiedene Methoden oder Klassen aufgeteilt werden kann.

QXmlStreamReader ein Parser für wohlgeformtes XML 1.0, ausgenommen extern geparste Entitäten. Daher müssen die dem Stream-Reader bereitgestellten Daten den W3C-Kriterien für wohlgeformtes XML entsprechen; andernfalls wird ein Fehler ausgelöst. Funktionen wie ` atEnd()`, ` error()` und ` hasError() ` können verwendet werden, um auf solche Fehler zu prüfen und eine Beschreibung derselben zu erhalten.

Die Methode ` QXmlStreamWriter ` ist eine Streaming-API, die sich um das Voranstellen von Namespaces kümmert, wenn beim Schreiben von Elementen oder Attributen die `namespaceUri` angegeben wird.

Klassen, die Serialisierung bereitstellen

<QtCborCommon>

Enthält Definitionen, die sowohl den Streaming-Klassen (QCborStreamReader und QCborStreamWriter) als auch QCborValue gemeinsam sind

QCborArray

Dient zur Speicherung eines Arrays von CBOR-Elementen

QCborMap

Dient zur Speicherung eines assoziativen Containers, der in CBOR darstellbar ist

QCborStreamReader

Einfacher CBOR-Stream-Decoder, der entweder auf einem „QByteArray“ oder einem „QIODevice“ arbeitet

QCborStreamWriter

Einfacher CBOR-Encoder, der auf einem Einweg-Stream arbeitet

QCborValue

Kapseln einen Wert in CBOR

QDataStream

Serialisierung binärer Daten in ein QIODevice

QJsonArray

Kapseln eines JSON-Arrays

QJsonDocument

Möglichkeit zum Lesen und Schreiben von JSON-Dokumenten

QJsonObject

Kapseln eines JSON-Objekts

QJsonParseError

Wird verwendet, um Fehler beim Parsen von JSON zu melden

QJsonValue

Kapseln eines Werts in JSON

QTextStream

Praktische Schnittstelle zum Lesen und Schreiben von Text

QXmlStreamReader

Schneller Parser zum Lesen wohlgeformter XML 1.0-Dokumente über eine einfache Streaming-API

QXmlStreamWriter

XML-1.0-Writer mit einer einfachen Streaming-API

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.