qtprotobufgen 工具
qtprotobufgen 工具可以从 protobuf 架构中生成 Qt Protobuf 类。该工具由 CMake 包 Qt6::ProtobufTools 提供。它作为 Google 的 protoc 工具的扩展。
find_package(Qt6 COMPONENTS ProtobufTools REQUIRED)
用法
Qt 提供了 CMake 函数,以简化 qtprotobufgen 工具的使用。在将 CMake 作为构建工具使用时,应首选使用 Qt CMake API。对于 CMake 之外的其他构建系统,请根据 手动运行 中描述的命令进行调整。
注意:使用 Qt GRPC 模块以 qmake 的方式构建 gRPC 和 Protobuf 应用程序没有显式支持。
CMake
以下 CMake 命令将 protobuf 架构集成到 Qt 项目中。
| 使用 protobuf 架构生成基于 Qt 的 C++ 源代码 | 
通常通过在 CMake 中使用 qt_add_protobuf 宏来调用 qtprotobufgen。
使用 qt_add_protobuf
cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)
find_package(Qt6 REQUIRED COMPONENTS Protobuf)
qt_standard_project_setup()
qt_add_protobuf(MyMessages
    GENERATE_PACKAGE_SUBFOLDERS
    PROTO_FILES
        path/to/message.proto
        path/to/other_message.proto
    PROTO_INCLUDES
        /path/to/proto/include
)
qt_add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE MyMessages)在上面的示例中,我们生成一个名为 MyMessages 的库,该库包含 PROTO_FILES 选项传递的路径中定义的消息类型。使用了 GENERATE_PACKAGE_SUBFOLDERS 选项以生成生成的文件的文件夹结构。而 PROTO_INCLUDES 选项告诉 protoc 在指定的目录中查找依赖项或导入。我们创建了一个名为 MyApp 的可执行文件的目标,并将其链接到 MyMessages 库。
手动运行
protoc --plugin=protoc-gen-qtprotobuf=<path/to/bin/>qtprotobufgen \
    --qtprotobuf_out="[<options>:]<output_dir>" \
    [--qtprotobuf_opt="<options>"] \
    [-I/extra/proto/include/path] \
    <protofile>.protooptions 参数是一个分号分隔的选项列表。它可以以两种方式传递。一种是在输出目录参数之前添加选项,用冒号分隔;另一种是通过一个单独的参数,--qtprotobuf_opt。您还可以通过将对应的键作为 QT_PROTOBUF_OPTIONS 环境变量传递。键需要以分号分隔的列表形式呈现。
export QT_PROTOBUF_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS;EXTRA_NAMESPACE=MyTopLevelNamespace"
选项
生成器支持可以提供来调整生成的选项。这些选项在 qt_add_protobuf 函数中有直接别名。以下选项受支持:
- COPY_COMMENTS从- .proto文件中复制注释。如果提供在参数列表中,则将与消息和字段相关的注释复制到生成的头文件中。
- GENERATE_PACKAGE_SUBFOLDERS为生成的文件生成与- .proto文件包名称匹配的文件夹结构。例如,- package io.qt.test;将生成的文件放入- io/qt/test/。
- EXTRA_NAMESPACE是一个可选的命名空间,它将用于生成的类。类总是生成在具有与- .proto文件中指定的包名相同的命名空间。如果使用此选项,则所有内容都将嵌套在额外的命名空间中。
- EXPORT_MACRO是用于生成的代码的符号导出宏的基本名称。生成的宏名构建为- QPB_<EXPORT_MACRO>_EXPORT。如果未设置此选项,则不会生成宏。
- QML_URI通过通过提供的- URI导入路径在 QML 模块中注册它们来启用 QML 上下文中的 QProtobufMessage 类型。生成的- qmldir文件的行中将使用- URI选项,并且还用于通过用正斜杠替换点来形成目标路径。- 注意:阅读 已识别模块 获取对 - URI的进一步深入讨论。
© 2024 Qt 公司有限公司。此处包含的文档贡献的版权属于各自的拥有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授予权利的。Qt 和相关标志是芬兰的 Qt 公司以及世界各地的商标。所有其他商标都是其各自所有者的财产。