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
Enthält Definitionen, die sowohl den Streaming-Klassen (QCborStreamReader und QCborStreamWriter) als auch QCborValue gemeinsam sind | |
Dient zur Speicherung eines Arrays von CBOR-Elementen | |
Dient zur Speicherung eines assoziativen Containers, der in CBOR darstellbar ist | |
Einfacher CBOR-Stream-Decoder, der entweder auf einem „QByteArray“ oder einem „QIODevice“ arbeitet | |
Einfacher CBOR-Encoder, der auf einem Einweg-Stream arbeitet | |
Kapseln einen Wert in CBOR | |
Serialisierung binärer Daten in ein QIODevice | |
Kapseln eines JSON-Arrays | |
Möglichkeit zum Lesen und Schreiben von JSON-Dokumenten | |
Kapseln eines JSON-Objekts | |
Wird verwendet, um Fehler beim Parsen von JSON zu melden | |
Kapseln eines Werts in JSON | |
Praktische Schnittstelle zum Lesen und Schreiben von Text | |
Schneller Parser zum Lesen wohlgeformter XML 1.0-Dokumente über eine einfache Streaming-API | |
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.