Qt Protobuf Veränderbare Getter

Die generierten Qt Protobuf Nachrichten ermöglichen den Zugriff auf die Felder eines Nachrichtentyps mithilfe von veränderbaren Gettern. Die Getter haben das Präfix „ mut “ und geben eine nicht-konstante Referenz auf das Feld zurück.

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

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

Das oben genannte „ .proto “-Schema generiert den folgenden Code für die Nachricht „ Line “:

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

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

Für die Felder „ start “ und „ end “ erstellt der Generator „qtprotobufgen“ zusätzliche veränderbare Getter: „ mutStart “ und „ mutEnd “. Verwenden Sie diese Getter, um Felder direkt zu ändern, ohne Zwischennachrichten zu erstellen:

Line line;

// Den Startpunkt der Linie auf (5,0, 5,0) setzen
line.mutStart().setX(5,0);
line.mutStart().setY(5,0);

// Den Endpunkt der Linie auf (10,0; 20,0) setzen
line.mutEnd().setX(10,0);
line.mutEnd().setY(20,0);

// Die Liniendaten anzeigen
qDebug().nospace() << "start: (" << line.start().x() << "," << line.start().y() << ") "
   "end: (" << line.end().x() << "," << line.end().y() << ")";

Der Aufruf der veränderbaren Getter führt alle erforderlichen Feldzuweisungen durch und ermöglicht es Ihnen, die zugrunde liegenden Daten direkt zu ändern.

Warnung: Mutable Getter fügen den Feldnamen das Präfix „ mut “ hinzu. Wenn eine Nachricht Felder mit den Namen „ field “ und „ mutField “ enthält, kommt es zu einem Namenskonflikt. Dieses Szenario wird derzeit nicht unterstützt und führt zu einem Generatorfehler.

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