Qt Protobuf Mutable Getters

The generated Qt Protobuf messages allow access to the fields of a message type using mutable getters. The getters have the mut prefix and return a non-const reference to the field.

message Point {
    double x = 1;
    double y = 2;
}
message Line {
    Point start = 1;
    Point end = 2;
}
					

The above .proto scheme generates the following code for the Line message:

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

对于 start and end fields, the qtprotobufgen generator creates additional mutable getters: mutStart and mutEnd . Use these getters to modify fields directly, without creating intermediate messages:

Line line;
// Setting the line start point to (5.0, 5.0)
line.mutStart().setX(5.0);
line.mutStart().setY(5.0);
// Setting the line end point to (10.0, 20.0)
line.mutEnd().setX(10.0);
line.mutEnd().setY(20.0);
// Display the Line data
qDebug().nospace() << "start: (" << line.start().x() << "," << line.start().y() << ") "
    "end: (" << line.end().x() << "," << line.end().y() << ")";
					

Calling the mutable getters performs any necessary field allocation and allows you to modify the underlying data directly.

警告: Mutable getters add a mut prefix to field names. If a message contains fields named field and mutField , a naming conflict occurs. This scenario is currently unsupported and will result in a generator error.