La herramienta qtprotobufgen
La herramienta qtprotobufgen puede utilizarse para generar clases Qt Protobuf a partir de un esquema protobuf. La herramienta es proporcionada por el paquete CMake Qt6::ProtobufTools. Funciona como una extensión de la herramienta protoc de Google.
find_package(Qt6 COMPONENTS ProtobufTools REQUIRED)
Uso
Qt proporciona funciones CMake que facilitan el uso de la herramienta qtprotobufgen. Cuando utilices CMake como herramienta de compilación deberías preferir utilizar la API CMake de Qt. Para sistemas de compilación distintos de CMake, adapta los comandos descritos en Ejecutar manualmente.
Nota: no hay soporte explícito para construir gRPC™ y aplicaciones Protobuf utilizando el módulo Qt GRPC con qmake.
CMake
Los siguientes comandos de CMake integran un esquema protobuf en un proyecto Qt.
Genera código fuente C++ basado en Qt usando un esquema protobuf. |
Normalmente qtprotobufgen se invocaría a través de CMake utilizando la macro qt_add_protobuf.
Usando qt_add_protobuf
cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)
find_package(Qt6 REQUIRED COMPONENTS Protobuf)
qt_standard_project_setup()
qt_add_protobuf(MyMessages
GENERATE_PACKAGE_SUBFOLDERS
PROTO_FILES
path/to/message.proto
path/to/other_message.proto
PROTO_INCLUDES
/path/to/proto/include
)
qt_add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE MyMessages)En el ejemplo anterior, generamos una biblioteca llamada MyMessages, que contiene los tipos de mensaje definidos en las rutas pasadas a la opción PROTO_FILES. La opción GENERATE_PACKAGE_SUBFOLDERS para generar una estructura de carpetas para los archivos generados. Y la opción PROTO_INCLUDES le dice a protoc que busque dependencias o importaciones en los directorios especificados. Creamos un objetivo para un ejecutable llamado MyApp, que enlazamos con la biblioteca MyMessages.
Ejecutando manualmente
protoc --plugin=protoc-gen-qtprotobuf=<path/to/bin/>qtprotobufgen \
--qtprotobuf_out="[<options>:]<output_dir>" \
[--qtprotobuf_opt="<options>"] \
[-I/extra/proto/include/path] \
<protofile>.protoEl argumento options es una lista de opciones separadas por punto y coma. Se puede pasar de dos maneras diferentes. O bien anteponiendo las opciones al argumento output_dir, delimitado por dos puntos. O a través de un argumento separado, --qtprotobuf_opt. También puede pasar las claves correspondientes como variable de entorno QT_PROTOBUF_OPTIONS. Las claves deben presentarse como una lista separada por punto y coma:
export QT_PROTOBUF_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS"
Opciones
El generador admite opciones que se pueden proporcionar para ajustar la generación. Las opciones tienen alias directos en la función qt_add_protobuf. Se admiten las siguientes opciones:
COPY_COMMENTScopia los comentarios de los archivos.protoen el código generado.GENERATE_PACKAGE_SUBFOLDERSutiliza el especificador de nombre de paquete de los archivos.protopara crear la estructura de carpetas de los archivos generados. Por ejemplo, si el paquete se define como:package io.qt.testlos archivos generados se colocarán en OUTPUT_DIRECTORY/io/qt/test/.EXPORT_MACROdefine el nombre base de la macro de exportación utilizada en el código generado. El nombre final de la macro se construye comoQPB_<EXPORT_MACRO>_EXPORT. Si no se define esta opción, no se genera ninguna macro de exportación.Desde Qt 6.8, se soporta el siguiente formato:
EXPORT_MACRO=macro_name[:macro_output_file[:<true|false>]]. Este formato permite especificar el nombre del archivo de cabecera que contiene la macro de exportación y controlar explícitamente si se genera.Nota: Si no se proporciona <fichero_salida_macro>, la opción adopta por defecto la sintaxis anterior.
HEADER_GUARDespecifica el mecanismo utilizado para proteger los archivos de cabecera generados de la inclusión múltiple. Los valores posibles sonpragma,filename. El valor predeterminado esfilename. Si se define la opción comopragma, se genera el pragma moderno de protección de encabezados:#pragma once ...
Omitir la opción o establecerla en
filenamegenera la protección de envolturaifdefy utiliza el nombre de archivo '.proto' como infijo de protección:#ifdef MYMESSAGES_QPB_H #define MYMESSAGES_QPB_H ... #endif // MYMESSAGES_QPB_H
Seleccione el estilo de guardia preferido según la estructura de su proyecto.
GENERATE_NON_FINAL_MESSAGESgenera clases de mensajes QtProtobuf sin el especificadorfinal. Esta opción se proporciona por compatibilidad con versiones anteriores. Desde Qt 6.11, las clases de mensajes QtProtobuf se generan comofinalpor defecto. Para ampliar el comportamiento de los mensajes generados, prefiera la composición a la herencia. Esta opción se eliminará en Qt7.
© 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.