Qt Grpc

最近又回归了金融行业,做 PC 客户端软件

服务端用 go 写的,用了 grpc,自然客户端也要共用 proto 文件

正巧,Qt 6.8 正式纳入了 qt grpc 模块,让我们搭建环境,Thinking in Qt!

Q_ENUM_NS

Qt GRPC 模块一般和 Qt Protobuf 模块一起使用

它不是开箱可用的,必须先安装 protoc,可选安装 openssl

众所周知,Qt6 使用 CMake 构建工程,默认不支持 qmake 导入该模块

Qt 提供了 Protobuf 插件,通过引入 ProtobufTools 模块

Qt 提供了 GRPC 插件,通过引入 GrpcTools 模块

因为默认的 protoc 生成的都是 C++ 的类型,比如 std::string、std::vector

通过 Qt 的插件:qtprotobufgen 和 qtgrpcgen,生成的 .h 和 .cpp 就是 QString、QList 类型

生成的枚举类型自带 Q_ENUM_NS,可以直接 qDebug,也可以通过 QMetaEnum 转成 QString

vcpkg

Qt 推荐使用 vcpkg 安装 gRPCProtobufOpenSSL 模块

这里说下 Qt Creator 配置 vcpkg

打开终端,依次输入命令,安装 protobuf、grpc 和 openssl

打开 Qt Creator,点击【帮助】——【关于插件...】

image-20250109215523066

新建项目后(Build system 选 cmake),点击【文件】——【New File...】

image-20250109215607042

编辑 vcpkg.json

image-20250109215854143

CMakeLists.txt

官网的太简单,这里给一份复杂点的参考,方便大家复制粘贴

这样,会在 proto 文件夹的不同子目录生成 *_protobuftyperegistrations.cpp、 *.qpb.cpp 和 *.qpb.h

TLS

这里要特别提一下这句

一开始一直连不上服务器

非常感谢下面这个链接,帮了我大忙

https://github.com/jgaa/next-app/blob/74705d3612a90c7f9f638c2b4bc68951123f9f7c/src/NextAppUi/ServerComm.cpp#L203

另外

也可以改成

这样就不用验证 key 了

GRPC

qt grpc 主要有 unary calls 和 bidirectional streams (以及 server streams 和 client streams)

通过 QGrpcCallReply 和 QGrpcBidiStream 来使用,这里简单分享下用法

可以登录 Qt 官方的 git,查看最新的 demo https://code.qt.io/cgit/qt/qtgrpc.git/tree/examples/grpc

image-20250109230123548

Copilot

之前我一直用网页打开 chatgpt.com,写 prompt 复制粘贴代码

Qt Creator 15.0.0 已经集成了 Copilot 插件,改变了我的编程习惯

image-20250109230837841

首先是安装 node.js

https://nodejs.org/en

然后安装 Neovim

https://neovim.io

最后 clone 以下仓库,参考下图配置 node.exe 及 language-server.js

现在我编写代码都常开代理,善用 tab 了

分享下我的快捷键设置

image-20250109231817191

End

最后的最后,再次感谢 vcpkg 和 copilot!

0FE79CD3