La herramienta qtgrpcgen
La herramienta qtgrpcgen puede utilizarse para generar clases de servicio Qt GRPC a partir de un esquema protobuf. La herramienta es proporcionada por el paquete CMake Qt6::GrpcTools. Funciona como una extensión de la herramienta protoc de Google.
find_package(Qt6 COMPONENTS GrpcTools REQUIRED)
Uso
Qt proporciona funciones CMake que facilitan el uso de la herramienta qtgrpcgen. Cuando se utiliza CMake como herramienta de compilación, es mejor utilizar la API CMake de Qt. Para sistemas de compilación distintos de CMake, puedes ajustar manualmente los comandos descritos en la sección Ejecución de qtgrpcgen.
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 servicio gRPC en un proyecto Qt.
Genera servicios C++ basados en Qt utilizando un esquema protobuf |
Normalmente qtgrpcgen se invocaría a través de CMake utilizando la macro qt_add_grpc, como se muestra en el siguiente ejemplo:
cmake_minimum_required(VERSION 3.16...3.22)
project(MyProject)
find_package(Qt6 REQUIRED COMPONENTS Protobuf Grpc)
qt_standard_project_setup()
qt_add_executable(MyApp main.cpp)
qt_add_protobuf(MyApp
PROTO_FILES
path/to/messages.proto
)
qt_add_grpc(MyApp CLIENT
PROTO_FILES
path/to/service.proto
)
target_link_libraries(MyApp PRIVATE Qt6::Protobuf Qt6::Grpc)El ejemplo anterior llama a la función CMake qt_add_grpc() para iniciar la generación de código Qt GRPC para las secciones service dentro del esquema protobuf proporcionado.
Nota: Si el esquema protobuf también contiene definiciones message, la función CMake qt_add_protobuf() también debe ser llamada para iniciar la generación de código Qt Protobuf.
Dado que reutilizamos el objetivo ejecutable, todos los archivos generados se añadirán al objetivo, y los directorios de inclusión se actualizarán en consecuencia.
Ejecutando qtgrpcgen manualmente
protoc --plugin=protoc-gen-qtgrpc=<path/to/bin/>qtgrpcgen \
--qtgrpc_out="[<options>:]<output_dir>" \
[--qtgrpc_opt="<options>"] \
[-I/extra/proto/include/path] \
<protofile>.protoEl argumento options es una lista de opciones separadas por punto y coma. Puede pasarse añadiendo options al argumento --qtgrpc_out, separados por dos puntos, o mediante un argumento independiente, --qtgrpc_opt. También puede pasar las claves correspondientes como variable de entorno QT_GRPC_OPTIONS. Las claves deben presentarse como una lista separada por punto y coma:
export QT_GRPC_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_grpc. 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.
QMLpermite generar un cliente QML para el servicio gRPC.
© 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.