上一教程对proto文件的语法进行了详细说明,本教程将对google protocol buffer数据序列化和反序列化进行举例说明。
下面先以最简单的数据结构为例:
第一步,新建项目,选择Qt Console Application
第二步,点击choose后,项目的名称和保存位置自己定义,有意义的工程名即可。
第三步,然后一直点击下一步,直到选择kit,选择如下图所示:
点击下一步即可。
教程(一)中解压的文件中有examples文件夹,
在此文件夹下新建proto文件,内容如下:
message person
{
required string name=1;
optional int32 age=2;
}
然后在examples文件夹中执行以下命令:
protoc -I=D:\protobuf-2.6.1\examples --cpp_out=D:\protobuf-2.6.1\examples D:\protobuf-2.6.1\examples\test_person.proto
命令中的文件夹名称根据需要修改。执行上述命令后生成两个文件:
将生成的文件复制到qt工程中并导入。导入后.cc文件有如下问题:
因为没有将这些文件加入pro文件中。
首先将D:\protobuf-2.6.1\vsprojects目录下的include文件夹复制到工程文件F:\test_proto下,然后在pro文件中输入:
INCLUDEPATH += F:\test_proto\include
除此之外,还需将lib文件加入到pro文件中,首先将D:\protobuf-2.6.1\vsprojects下的Debug文件夹复制到工程文件夹中,然后在Qt文件夹中右键工程名,点击“添加库”-----选择“外部库”------然后选择库文件旁边的浏览,选择如下图所示路径:
包含路径会自动生成。点击下一步后将内容添加到pro文件中即可。
至此,环境以及配置完成。下面就开始编辑程序:
#include"test_person.pb.h"
using namespace std;
#include"iostream"
int main()
{
person p;//首先给message命名
p.set_age(18);//将age赋值
p.set_name("djx");//将name赋值
string str;
p.SerializeToString(&str);//将序列化后的二进制文件保存到str文件中
person p1;//反序列化时需要重命名
p1.ParseFromString(str);//反序列化
cout<<"person name: "<<p1.name()<<endl;//将反序列化后的数据输出
cout<<"person age: "<<p1.age();
}
程序运行结果:
google protocol buffer数据在Qt creator中的序列化和反序列化的教程到此结束。下一教程将对更加复杂的数据结构repeated进行说明。如果有问题可以在评论区留言。