qtgrpcgen 工具

The qtgrpcgen tool can be used to generate Qt GRPC service classes from a protobuf schema. The tool is provided by the CMake Qt6::GrpcTools package. It works as an extension to Google's protoc tool.

find_package(Qt6 COMPONENTS GrpcTools REQUIRED)

用法

Qt 提供了 CMake 函数,可以简化对 qtgrpcgen 工具的使用。当使用 CMake 作为构建工具时,应优先使用 Qt CMake API。对于非 CMake 的构建系统,请根据 手动运行 qtgrpcgen 中描述的命令进行调整。

注意:使用 Qt GRPC 模块和 qmake 构建 gRPC 和 Protobuf 应用程序没有显式支持。

CMake

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

qt_add_grpc

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

通常,通过 CMake 使用 qtgrpcgen 的方法是使用 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_protobuf(MyProtoMessageLib
    PROTO_FILES
        path/to/helloworld.proto
    PROTO_INCLUDES
        path/to/proto/include
)

qt_add_grpc(MyGrpcClient CLIENT
    PROTO_FILES
        path/to/helloworld.proto
    PROTO_INCLUDES
        path/to/proto/include
)

qt_add_executable(MyApp main.cpp)

target_link_libraries(MyApp PRIVATE MyGrpcClient MyProtoMessageLib Qt6::Protobuf)

上述示例调用了 qt_add_grpc() CMake 函数来生成一个名为 MyGrpcClient 的库。

注意:如果 .proto 文件 API 包含消息,则应调用 qt_add_protobuf() CMake 函数以生成项目所需的 protobuf 消息类。

最后,示例创建了一个名为 MyApp 的可执行目标,该目标链接到 MyGrpcClientMyProtoMessageLib 库。

手动运行 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 参数是一个分号分隔的选项列表。它可以通过在 output_dir 参数前添加 options 并用冒号分隔,或者通过单独的参数 --qtgrpc_opt 传递。您还可以通过 QT_GRPC_OPTIONS 环境变量传递相应的键。键必须作为分号分隔的列表呈现

export QT_GRPC_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS;EXTRA_NAMESPACE=MyTopLevelNamespace"

选项

生成器支持可以通过提供来调整生成的选项。选项在 qt_add_grpc 函数中具有直接别名。以下选项是被支持的

  • COPY_COMMENTS 将来自 .proto 文件的注释复制过来。如果在参数列表中提供,与消息和字段相关的注释将被复制到生成的头文件中。
  • GENERATE_PACKAGE_SUBFOLDERS 为生成的文件生成一个与 .proto 文件包名匹配的文件夹结构。例如,package io.qt.test; 会将生成的文件放入 io/qt/test/
  • EXTRA_NAMESPACE 是一个可选的命名空间,它将被用于生成的类。类总是生成在与 .proto 文件中指定的包名相同的命名空间下。如果使用此选项,则所有内容都将嵌套在额外命名空间内。
  • EXPORT_MACRO 是用于生成代码的符号导出宏的基本名称。生成的宏名称构造为 QPB_<EXPORT_MACRO>_EXPORT。如果未设置该选项,则不会生成宏。
  • QML 启用 QmlClient 生成。该类从基本 CLIENT 类继承,但通过 QML_ELEMENT 宏、QML 属性和 Q_INVOKABLE 方法进行扩展。生成结果可以添加到 QML 模块中,这使得 QmlClient 可能在 QML 中作为一个对象。以下是如何将 QmlClient 类添加到 QML 模块的示例:
    qt_add_protobuf(targetname
        QML
        ...
    )
    qt_add_grpc(targetname
        QML
        ...
    )

    注意:仅支持 Qt 6.7 的 QmlClient 源代码生成。

© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。提供的文档按照自由软件基金会发布的、版本 1.3 的 GNU 自由文档许可协议 的条款进行许可。Qt 及相关标识是芬兰及其它全球国家的 Qt 公司有限公司的商标。所有其他商标均为其各自所有者的财产。