Qt Protobuf
Qt Protobuf 生成器插件可从.proto
文件生成基于 Qt 的类。您可以使用这些类对相关的 protobuf 消息进行序列化和反序列化。
概述
什么是协议缓冲区?
协议缓冲区是一种语言中立、平台中立、可扩展的结构化数据序列化机制,它结构紧凑、易于使用:
- 用户在
.proto
文件中定义数据的结构。 - Proto 编译器在构建时调用
.proto
文件,生成各种编程语言的代码。
所提供的格式适用于网络通信或长期数据存储。
协议缓冲区解决了哪些问题?
协议缓冲区为类型化和结构化数据包提供了一种序列化格式,数据包大小可达几兆字节。它允许扩展新信息,而不会使现有数据失效或要求更新代码。如需了解更多信息,请参阅协议缓冲区概述。
使用的好处Qt Protobuf
你可以在任何基于 Qt 的项目中使用协议缓冲机制:
- 无需明确调用协议缓冲编译器。
- 无需将生成的代码手动集成到项目树中。
- 访问序列化和反序列化 API。
- 为生成的 protobuf 消息集成属性机制。
- 集成的 gRPC 客户端支持,请参见Qt GRPC 模块。
- 为生成的 protobuf 消息集成QML 类型支持。
- 使用已启用的 Qt Core和 Qt GUI类型作为 *.proto 模式的一部分。
使用模块
谷歌协议缓冲区提供了一个名为protoc
的生成器,它支持扩展。qtprotobufgen 工具是protoc
的扩展,需要在主机系统上安装protoc
。有关安装的更多信息,请参阅Protoc 安装。
- Linux 安装示例,使用apt:
apt install -y protobuf-compiler protoc --version # Ensure compiler version is 3+
- Windows 安装示例,使用 vcpkg
QML API
模块的 QML 类型可通过qt_add_protobuf宏中的 QML 和 QML_URI 选项获得。导入名等于.proto
包名,或由qt_add_protobuf宏中的 QML_URI 选项定义。要使用这些类型,请在 .qml 文件中添加以下导入语句:
import my.proto.package.uri
C++ API
使用 Qt 模块的 C++ API 需要直接或通过其他依赖关系与模块库链接。一些编译工具对此提供了专门支持,包括CMake和qmake。
使用 CMake 构建
使用find_package()
命令在Qt6
软件包中找到所需的模块组件:
find_package(Qt6 REQUIRED COMPONENTS Protobuf) target_link_libraries(mytarget PRIVATE Qt6::Protobuf)
更多详情,请参阅使用 CMake 构建概述。
文章与指南
引用
示例
许可证和归属
Qt Protobuf 模块可在Qt Company 的商业许可下使用。此外,它还受自由软件许可证的保护:GNU 宽通用公共许可证第 3 版,或GNU 通用公共许可证第 2 版,或GNU 通用公共许可证第 3 版。更多详情,请参阅Qt 许可。
此外,Qt 6.9.0 中的qtprotobufgen
工具可能包含以下许可下的第三方模块:
BSD 3 条款 "新 "或 "修订 "许可证 |
© 2025 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.