Qt Protobuf Getters modifiables

Les Qt Protobuf permettent d’accéder aux champs d’un type de message à l’aide de getters modifiables. Ces getters sont précédés du préfixe « mut » et renvoient une référence non constante au champ.

message Point {
    double x = 1;
    double y = 2;
}

message Line {
    Point start = 1;
    Point end = 2;
}

Le schéma « .proto » ci-dessus génère le code suivant pour le message « Line » :

class Line : public QProtobufMessage
{
    const Point &start() const &;
    Point &mutStart() &;
    ...

    const Point &end() const &;
    Point &mutEnd() &;
    ...
}

Pour les champs ` start ` et ` end `, le générateur `qtprotobufgen ` crée des accesseurs modifiables supplémentaires : ` mutStart ` et ` mutEnd`. Utilisez ces accesseurs pour modifier directement les champs, sans créer de messages intermédiaires :

Line line;

// Définition du point de départ de la ligne à (5,0, 5,0)
line.mutStart().setX(5,0);
line.mutStart().setY(5,0);

// Définition du point de fin de la ligne à (10,0, 20,0)
line.mutEnd().setX(10,0);
line.mutEnd().setY(20,0);

// Affichage des données de la ligne
qDebug().nospace() << "start: (" << line.start().x() << "," << line.start().y() << ") "
   "end: (" << line.end().x() << "," << line.end().y() << ")";

L'appel des accesseurs modifiables effectue toute allocation de champ nécessaire et vous permet de modifier directement les données sous-jacentes.

Avertissement : les accesseursmutables ajoutent le préfixe « mut » aux noms des champs. Si un message contient des champs nommés « field » et « mutField », un conflit de nommage se produit. Ce scénario n’est actuellement pas pris en charge et entraînera une erreur de générateur.

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