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>.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 公司有限公司的商标。所有其他商标均为其各自所有者的财产。