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 项目中。
| 使用 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 的可执行目标,该目标链接到 MyGrpcClient 和 MyProtoMessageLib 库。
手动运行 qtgrpcgen
protoc --plugin=protoc-gen-qtgrpc=<path/to/bin/>qtgrpcgen \
    --qtgrpc_out="[<options>:]<output_dir>" \
    [--qtgrpc_opt="<options>"] \
    [-I/extra/proto/include/path] \
    <protofile>.protooptions 参数是一个分号分隔的选项列表。它可以通过在 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 公司有限公司的商标。所有其他商标均为其各自所有者的财产。