一、Protobuf简介
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。
你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。
ProtocolBuffer拥有多项比XML更高级的串行化结构数据的特性,ProtocolBuffer:
-
更简单
-
小3-10倍
-
快20-100倍
-
更少的歧义
-
可以方便的生成数据存取类
二、前期准备工作
2.1、下载并安装Qt
QT的下载地址,建议使用5.7以上版本:https://download.qt.io/archive/qt/
选择MinGW 版本选择 next 即可完成安装。
2.2、下载cmake并安装
Cmake下载地址:https://cmake.org/download/
根据向导使用默认选项设置即可完成安装。
2.3、下载protobuf的源码
Protbuf源码下载地址:https://github.com/protocolbuffers/protobuf/releases
选择c++版本源码下载到本地,并解压缩
2.4、下载并安装MinGW
mingw-get-setup.exe下载地址:http://www.mingw.org/
注意:需要科学上网,否则会一直卡住,提示错误,连接服务器失败。而且科学上网也会失败(不一定一次就能安装好),不断的继续,一定可以安装好的。
安装教程:
按照安装指导到达这一步后,左侧选中Basic Setup
,然后对右侧的每一项都鼠标右键选择Mark for installation
然后选择菜单栏Installation
中的Apply Changes
,点击Apply开始下载安装
只需要等待安装完成即可,如下所示:
检测安装目录下\bin中是否有mingw32-make.exe
,有则安装成功
三、编译Protobuf
3.1、在下载的Protobuf源码目录下新建build文件夹,用来存放编译结果
3.2、打开CMake,进行配置
注意项:
- where is the source code:选择protobuf源码下的cmake目录;
- where to build the binaries:选择在protobuf源码下新建build目录;
- 如果出现了如下错误,则点击
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
- 点击Advanced,将CMAKE_MAKE_PROGRAM项后面的路径设置为MinGW/bin/mingw32-make.exe,重新点击Configure,问题解决!
3.3、选中如下两项,点击Generate进行生成
3.4、生成完毕如下图所示,在build文件夹中也会生成一些文件
3.5、在build文件夹下按下shift键,鼠标右键打开命令行,输入mingw32-make
开始编译
编译结束后,我们打开build文件夹可以看到生成的库文件和protoc.exe,如下图所示:
四、在Qt中配置protobuf
4.1、编写一个简单.proto
后缀文件(注意:后缀必须改为.proto)
4.2、使用protoc.exe编译.proto
文件生成.h
和.c
文件
注意:需要把protoc.exe所在路径加到系统环境变量中
在Windows上可以新建批处理文件(.bat
),加入如下代码:
@echo on
setlocal EnableDelayedExpansion
set project_name=School
set cur_disk=%~d0
set proto_file_dir=%~dp0
%cur_disk%
cd /D %proto_file_dir%
del /F %project_name%.pb.cc
del /F %project_name%.pb.h
"protoc.exe" --proto_path %proto_file_dir% --cpp_out %proto_file_dir% %proto_file_dir%%project_name%.proto
pause
双击即可自动生成.cc
和.h
文件
注意:需保证protobuf添加到系统变量里,或者当前路径下存在protoc.exe
4.3、新建Qt工程,并在.pro文件中添加protobuf源码路径和编译生成的库
INCLUDEPATH += D:\Qt\protobuf-cpp-3.13.0\protobuf-3.13.0\src
LIBS += -L D:\Qt\protobuf-cpp-3.13.0\build -lprotobuf
4.4、将生成的.h
和.c
文件复制到工程目录下,并添加进工程
4.5、编写测试代码
#include "mainwindow.h"
#include <QApplication>
#include <testData.pb.h> //添加头文件
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
school::Student stu; //定义对象,每个message都相当于一个struct
stu.set_chinese(90);
qDebug()<<"Chinese: "<<stu.chinese();
MainWindow w;
w.show();
return a.exec();
}