Qt Protobuf

Qt Protobuf ジェネレーター・プラグインは.proto ファイルから Qt ベースのクラスを生成します。このクラスを使用して、関連するprotobufメッセージをシリアライズおよびデシリアライズできます。

概要

プロトコルバッファとは?

プロトコルバッファは、構造化されたデータをシリアライズするための、言語やプラットフォームに依存しない拡張可能なメカニズムです:

  • ユーザーは.proto ファイルでデータの構造を定義します。
  • Protoコンパイラは、ビルド時に.proto ファイルに対して起動され、さまざまなプログラミング言語のコードを生成します。

提供されるフォーマットは、ネットワーク・トラフィックや長期的なデータ保存に適しています。

プロトコル・バッファはどのような問題を解決するのか?

プロトコル・バッファは、数メガバイトまでの型付けされ構造化されたデータ・パケットのシリアライズ形式を提供します。これにより、既存のデータを無効にしたり、コードを更新したりすることなく、新しい情報を拡張することができます。詳細については、プロトコル・バッファの概要を参照してください。

使用するメリットQt Protobuf

どの Qt ベースのプロジェクトでも、プロトコルバッファ機構を使用することができます:

  • プロトコルバッファコンパイラを明示的に呼び出す必要がありません。
  • 生成されたコードを手動でプロジェクトツリーに統合する必要がありません。
  • シリアライズとデシリアライズの API にアクセスする。
  • 生成されたprotobufメッセージのプロパティメカニズムの統合。
  • 統合されたgRPCクライアントのサポートについては、Qt GRPC モジュールを参照してください。
  • 生成されたprotobufメッセージの統合されたQML-typesサポート。
  • 有効な Qt Coreおよび Qt GUI型を *.proto スキーマの一部として使うため。

モジュールの使用

Googleプロトコルバッファはprotoc というジェネレータを提供しています。qtprotobufgen Toolは protoc の拡張であり、ホスト・システムにprotoc をインストールする必要があります。インストールの詳細については、Protocのインストールを参照してください。

QML API

モジュールの QML タイプは、qt_add_protobufマクロの QML と QML_URI オプションで利用できます。インポート名は.proto パッケージ名と同じか、qt_add_protobufマクロの QML_URI オプションで定義されます。型を使用するには、.qml ファイルに以下の import 文を追加します:

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 モジュールは、The Qt Company の商用ライセンスで利用可能です。さらに、フリーソフトウェアライセンスでも利用可能です:GNU劣等一般公衆ライセンス、バージョン3、またはGNU一般公衆ライセンス、バージョン2、またはGNU一般公衆ライセンス、バージョン3。詳細はQt ライセンスを参照してください。

さらに、Qt 6.8.2のqtprotobufgen ツールには、以下の寛容なライセンスの下、サードパーティモジュールを含めることができます:

protobuf, version 21.9

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.