Sur cette page

Sérialisation Qt

La sérialisation a pour but d’enregistrer l’état d’un objet afin de pouvoir le recréer en cas de besoin. Elle vous permet d’effectuer des actions telles que :

  • Envoyer l’objet à une application distante à l’aide d’un service web
  • Transmettre l’objet sous forme de chaîne JSON ou XML
  • Enregistrer et restaurer des informations utilisateur ou les partager entre applications

L'API Qt prend en charge la sérialisation pour plusieurs cas d'utilisation :

  • La prise en chargede JSON dans Qt offre une API C++ facile à utiliser pour analyser, modifier et enregistrer des données JSON. La prise en charge de CBOR dans Qt est un format compact d’encodage de données binaires qui constitue un sur-ensemble de JSON.
  • QDataStream Elle permet la sérialisation de données binaires vers un QIODevice
  • Qt XML C++ Classes fournit des implémentations C++ des normes XML Streaming et DOM pour le format XML
  • CBOR est l’implémentation par Qt du format de sérialisation CBOR.
  • QSettings Permet de sérialiser et de stocker des paramètres d’application indépendants de la plateforme.

Avantages de JSON et CBOR

Lorsque vous utilisez JSON, les informations sont stockées dans un fichier « QJsonObject » et un « QJsonDocument » se charge de transmettre les valeurs vers un fichier « QByteArray ».

Par exemple

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 présente plusieurs avantages :

  • Le JSON textuel est déclaratif, ce qui le rend lisible par l’utilisateur
  • Les informations sont structurées
  • L'échange d'informations génériques est facile
  • JSON permet d’enrichir les messages avec des valeurs supplémentaires
  • Il existe de nombreuses solutions pour recevoir et analyser du JSON dans les environnements cloud

Le CBOR (Concise Binary Object Representation) est un format d'encodage de données binaires très compact qui constitue un sur-ensemble de JSON. Il a été créé par le groupe de travail CoRE (Constrained RESTful Environments) de l'IETF et est utilisé dans de nombreuses nouvelles RFC. Le CBOR partage de nombreux avantages du JSON, mais sacrifie la lisibilité humaine au profit de la compacité.

Avantages des classes QDataStream

QDataStream C'est une option viable lorsque l'ensemble du flux de données est déterminé et ne devrait pas changer. De plus, le lecteur et l'éditeur des données doivent tous deux être écrits en Qt.

L’ajout de la prise en charge de cette fonctionnalité à une classe nécessite deux opérateurs supplémentaires. Par exemple, pour une classe nommée `SensorInformation` :

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

L’implémentation de la sérialisation est présentée ci-dessous :

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

La désérialisation fonctionne de manière similaire, mais utilise l'opérateur ` >> `. Par exemple : ` out >> item.m_id`, etc.

En général, l’utilisation d’ QDataStream est plus rapide que l’utilisation du format JSON textuel.

Avantages des classes C++ de type « Qt XML »

Qt fournit à la fois des classes DOM et des classes basées sur les flux pour lire et écrire du contenu XML.

Qt fournit la classe ` QDomDocument ` qui représente le document XML, ainsi que deux classes permettant de lire et d’écrire le XML via une API de flux simple : ` QXmlStreamReader ` et ` QXmlStreamWriter`.

Les classes DOM XML

QDomDocument représente l'intégralité du document XML. Elle constitue la racine de l'arborescence du document et offre un accès principal aux données du document.

Les classes XML basées sur les flux

Un lecteur de flux présente un document XML sous la forme d’un flux de tokens. Cela diffère de SAX, car les applications SAX fournissent des gestionnaires pour recevoir les événements XML provenant de l’analyseur, tandis que l’ QXmlStreamReader e pilote la boucle, récupérant les tokens auprès du lecteur au fur et à mesure des besoins. Cette approche par extraction permet de construire des analyseurs récursifs descendants, ce qui permet de diviser le code d’analyse XML en différentes méthodes ou classes.

QXmlStreamReader un analyseur syntaxique pour le XML 1.0 bien formé, à l’exclusion des entités analysées externes. Par conséquent, les données fournies au lecteur de flux doivent respecter les critères du W3C relatifs au XML bien formé, faute de quoi une erreur sera levée. Des fonctions telles que ` atEnd()`, ` error()` et ` hasError() ` peuvent être utilisées pour détecter ces erreurs et obtenir une description de celles-ci.

La méthode QXmlStreamWriter est une API de flux qui se charge d’ajouter le préfixe aux espaces de noms, lorsque l’URI de l’espace de noms (namespaceUri) est spécifié lors de l’écriture d’éléments ou d’attributs.

Classes fournissant la sérialisation

<QtCborCommon>

Contient des définitions communes aux classes de flux (QCborStreamReader et QCborStreamWriter) et à QCborValue

QCborArray

Utilisée pour contenir un tableau d’éléments CBOR

QCborMap

Utilisée pour contenir un conteneur associatif représentable en CBOR

QCborStreamReader

Décodeur de flux CBOR simple, fonctionnant soit sur un QByteArray, soit sur un QIODevice

QCborStreamWriter

Encodeur CBOR simple fonctionnant sur un flux unidirectionnel

QCborValue

Encapsule une valeur en CBOR

QDataStream

Sérialisation de données binaires vers un QIODevice

QJsonArray

Encapsule un tableau JSON

QJsonDocument

Moyen de lire et d'écrire des documents JSON

QJsonObject

Encapsule un objet JSON

QJsonParseError

Utilisé pour signaler les erreurs lors de l'analyse JSON

QJsonValue

Encapsule une valeur au format JSON

QTextStream

Interface pratique pour lire et écrire du texte

QXmlStreamReader

Analyseur rapide permettant de lire des documents XML 1.0 bien formés via une API de streaming simple

QXmlStreamWriter

Écrivain XML 1.0 avec une API de streaming simple

© 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.