Qt Protobuf

Qt Protobuf 生成器插件可以从 .proto 文件生成基于 Qt 的类。您可以使用这些类来序列化和反序列化相关的 protobuf 消息。

概览

什么是协议缓冲区?

协议缓冲区是一种语言无关、平台无关且可扩展的数据序列化机制,它既紧凑又易于使用。

  • 用户在 .proto 文件中定义数据结构。
  • 在构建时会在 .proto 文件上调用 Proto 编译器来生成各种编程语言中的代码。

提供的格式适用于网络流量或长期数据存储。

协议缓冲区解决了哪些问题?

协议缓冲区为大小不超过几兆字节的类型化和结构化数据包提供了一种序列化格式。此外,它可以通过新信息进行扩展,而无需使现有数据无效或更新代码。有关更多信息,请参阅 协议缓冲区概述

使用 Qt Protobuf 的好处是什么?

您可以在任何基于 Qt 的项目中使用协议缓冲区机制。

  • 无需显式调用协议缓冲区编译器。
  • 无需手动将生成的代码集成到项目树中。
  • 便捷的序列化和反序列化 API。
  • 为生成的 protobuf 消息集成属性机制。
  • 集成 gRPC-client 支持(参见 Qt GRPC 模块)。
  • 集成对生成的 protobuf 消息的支持 QML 类型。请参阅 Qt Protobuf QML 类型
  • 可以使用 Qt Core 和 Qt GUI 类型作为 *.proto 架构的一部分启用。请参阅 Protobuf Qt Core Types 模块Protobuf Qt GUI 类型模块

即将推出的功能

  • 启用 gRPC-server 支持。

使用模块

Google 协议缓冲区提供了一个名为 protoc 的生成器,它支持扩展。《a href="qtprotobufgen-qt-tool.html" translate="no">Qt Protobuf 生成工具 是 protoc 的扩展,需要在您的主机系统上安装 protoc。有关安装的更多信息,请参阅 Protoc 安装

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 需要链接到模块库,无论是直接链接还是通过其他依赖项。包括 CMakeqmake 在内的几个构建工具都对此提供了专用支持。

使用 CMake 构建

使用 find_package() 命令在 Qt6 软件包中定位所需模块组件

find_package(Qt6 REQUIRED COMPONENTS Protobuf)
target_link_libraries(mytarget PRIVATE Qt6::Protobuf)

有关更多详情,请参阅 使用 CMake 构建 概述。

文章和指南

参考资料

示例

许可证和归属

Qt Protobuf 模块可在芬兰的 The Qt Company 和/或其他国家的商业许可证下获取。此外,它还可根据以下免费软件许可证获得:GNU Lesser General Public License,版本 3;或GNU General Public License,版本 2;或GNU General Public License,版本 3。请参阅 Qt 许可证 获取更多详情。

此外,Qt 6.7.2 中的 qtprotobufgen 工具可能包含以下宽容许可证下的第三方模块

protobuf,版本 21.9

BSD 3-clause "新"或"修订"许可证

© 2024 The Qt Company Ltd. 本文档中的贡献是各自所有者的版权。本提供文档的许可证是根据自由软件基金会发布的 GNU 自由文档许可证(FDL)版本 1.3 的条款授予的。Qt 和相关标志是芬兰的 The Qt Company Ltd. 在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。