Qt Protobuf 6.7.0

- Qt 6.7
- Qt Protobuf
- Qt 6.7.0 Reference Documentation

# Qt Protobuf

The Qt Protobuf generator plugin generates Qt-based classes from `.proto` files. You can use the classes to serialize and deserialize their associated protobuf messages.

## Overview

### What are protocol buffers?

Protocol buffers are a language-neutral, platform-neutral, and extensible mechanism for serializing structured data, which is compact and easy to use:

- A user defines the structure of data in `.proto` files.
- Proto compiler is invoked at build time on `.proto` files to generate code in various programming languages.

The provided format is suitable for network traffic or long-term data storage.

### Which problems do protocol buffers solve?

Protocol buffers provide a serialization format for packets of typed and structured data that are up to a few megabytes in size. Moreover, it can be extended with new information without invalidating existing data or requiring code to be updated. For more information, see Protocol Buffers Overview.

### What are the benefits of using Qt Protobuf?

You can use a Protocol buffers mechanism in any Qt-based project:

- No need to call a protocol buffer compiler explicitly.
- No need to integrate generated code into project tree manually.
- Convenient serialization and deserialization API.
- Integrated properties mechanism for generated protobuf messages.
- Integrated gRPC-client support (see QtGrpc module).
- Integrated QML-types support for generated protobuf messages. See Qt Protobuf QML types
- Enabled using Qt Core and Qt GUI types as a part of *.proto schema. See Protobuf Qt Core types module and Protobuf Qt GUI types module.

### Incoming features

- Enabling gRPC-server support.

## Using the Module

Google protocol buffers provide a generator called `protoc` that supports extensions. The qtprotobufgen Tool is an extension for `protoc` and requires that you install `protoc` on your host system. For more information about the installation, see Protoc Installation.

Example of installation for Linux, using apt:

     apt install -y protobuf-compiler
     protoc --version  # Ensure compiler version is 3+

For more information about component API usage, see CMake API.

### QML API

The QML types of the module are available through the QML and QML_URI options in the qt_add_protobuf macro. The import name is equal to the `.proto` package name or defined by QML_URI option in the qt_add_protobuf macro. To use the types, add the following import statement to your .qml file:

     import my.proto.package.uri

### C++ API

Using a Qt module's C++ API requires linking against the module library, either directly or through other dependencies. Several build tools have dedicated support for this, including CMake and qmake.

#### Building with CMake

Use the `find_package()` command to locate the needed module component in the `Qt6` package:

     find_package(Qt6 REQUIRED COMPONENTS Protobuf)
     target_link_libraries(mytarget PRIVATE Qt6::Protobuf)

For more details, see the Build with CMake overview.

## Articles and Guides

- CMake Commands in Qt6 Protobuf
- Protobuf Qt Core types
- Protobuf Qt GUI types
- Qt Protobuf Well-Known types

## References

- Qt Protobuf C++ Classes
- Qt Protobuf QML types

## Examples

- Qt Protobuf Examples