本页内容

qtgrpcgen 工具

qtgrpcgen 工具可用于根据protobuf模式生成Qt GRPC 服务类。该工具由CMake的Qt6::GrpcTools 包提供,它是Googleprotoc 工具的扩展。

find_package(Qt6 COMPONENTS GrpcTools REQUIRED)

用法

Qt 提供了便于使用qtgrpcgen 工具的 CMake 函数。当使用 CMake 作为构建工具时,建议利用Qt CMake API。对于 CMake 以外的构建系统,您可以按照“手动运行 qtgrpcgen”中所述的命令进行调整。

注意:目前尚 不明确支持使用 gRPC™Qt GRPC 和 Protobuf 应用程序。

CMake

以下 CMake 命令可将gRPC 服务集成到 Qt 项目中。

qt_add_grpc

使用 protobuf 模式生成基于 Qt 的 C++ 服务

通常,qtgrpcgen 会通过CMake中的qt_add_grpc 宏进行调用,如下例所示:

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)

上述示例调用了qt_add_grpc() CMake 函数,以针对所提供的 protobuf 模式中的service 部分启动Qt GRPC 代码生成。

注意:如果 Protobuf 模式中还包含message 定义,则也应调用qt_add_protobuf() CMake 函数以启动Qt Protobuf 代码的生成。

由于我们复用了可执行目标,所有生成的文件都将追加到该目标中,并且包含目录也会相应地更新。

手动运行qtgrpcgen

protoc --plugin=protoc-gen-qtgrpc=<path/to/bin/>qtgrpcgen \
    --qtgrpc_out="[<options>:]<output_dir>" \
    [--qtgrpc_opt="<options>"] \
    [-I/extra/proto/include/path] \
    <protofile>.proto

options 参数是一个由分号分隔的选项列表。可以通过在--qtgrpc_out 参数后添加options (用冒号分隔)来传递该参数,也可以通过单独的参数--qtgrpc_opt 传递。您还可以将相应的键作为QT_GRPC_OPTIONS 环境变量传递。键必须以分号分隔的列表形式呈现:

export QT_GRPC_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS"

选项

该生成器支持用于调整生成的选项。这些选项在qt_add_grpc函数中具有直接的别名。支持以下选项:

  • COPY_COMMENTS 将.proto 文件中的注释复制到生成的代码中。
  • GENERATE_PACKAGE_SUBFOLDERS 使用.proto 文件中的包名指定符来创建生成的文件的文件夹结构。例如,如果包定义为:package io.qt.test ,则生成的文件将放置在OUTPUT_DIRECTORY/io/qt/test/ 中。
  • EXPORT_MACRO 定义生成代码中使用的导出宏的基名。最终的宏名将按QPB_<EXPORT_MACRO>_EXPORT 的格式构建。如果未设置此选项,则不会生成导出宏。

    从 Qt 6.8 开始,支持以下格式:EXPORT_MACRO=macro_name[:macro_output_file[:<true|false>]] 。此格式允许您指定包含导出宏的头文件名称,并明确控制是否生成该宏。

    注意:如果 未提供<macro_output_file>,该选项将默认采用之前的语法。

  • HEADER_GUARD 指定用于防止生成的头文件被多次包含的机制。可能的值包括pragma 、filename 。默认值为filename 。将该选项设置为pragma 将生成现代的pragma header guard:
    #pragma once
    ...

    省略该选项或将其设置为filename 时,将生成ifdef 包装式保护机制,并使用 '.proto' 文件名作为保护机制的中缀:

    #ifdef MYMESSAGES_QPB_H
    #define MYMESSAGES_QPB_H
    ...
    #endif // MYMESSAGES_QPB_H

    请根据您的项目结构选择合适的守护语句样式。

  • QML 可启用为gRPC 服务生成 QML 客户端的功能。

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