在动态链接库中以非GUI形式调用Qt组件并提供C语言形式API

本文介绍了如何在动态链接库中使用Qt HttpServer并提供C语言形式的API。通过编译QtHttpServer模块,创建主服务类封装HttpServer,并解决QCoreApplication在非GUI环境中的使用问题。最后,展示了如何构建C接口以供外部调用。
摘要由CSDN通过智能技术生成

设想一下,你的主要业务逻辑都由Qt C++完成,你需要给第三方提供你的业务服务,所以你需要把它们全部封装进一个动态链接库供客户调用;由于业务逻辑的需要或是历史原因,部分服务的接口是Http服务形式提供。客户挂载动态库,只需要一句server start,即可在自己的进程中启动并给他们的客户提供我们开发的服务,同时也可以加入他们自己的服务,并且调用我们提供的其他api接口,这样可以实现一个高度自由的一体化的交付方案。要实现这样的效果,一个解决方案是借助Qt的HttpServer扩展库和QCoreApplication。

编译 QtHttpServer 模块

首先拉取代码

git clone https://github.com/qt-labs/qthttpserver.git
cd qthttpserver
git checkout 5.15
git submodule update --init --recursive

然后用qtcreator打开工程,编译

最简单的Qt代码

如果想构建一个最简单的Qt程序,那么大概就是一个没有UI、控制台下运行的HelloWorld程序,它的代码大概是这个样子:

#include <QtCore>

int main(int argc, char **argv) {
   
    QCoreApplication app(argc, argv);

    // qDebug()<<"Hello World";

    return app.exec();
}

使用QtHttpServer

QtHttpServer目前不在Qt的主lib中,据说Qt6会正式加入。所以需要自行下载编译。

编译QtHttpServer

我使用的是Qt5,牵出5.15分支,并自己使用QtCreator编译:

git clone https://github.com/qt-labs/qthttpserver.git
git checkout 5.15

编译成功后,将头文件和动态库拷贝到所使用的Qt安装路径下的对应目录内即可。

cd build-qthttpserver-Desktop_Qt_5_12_6_GCC_64bit-Release/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/

cd cmake/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/cmake/

cd ..
cd pkgconfig/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/pkgconfig/

cd ..
cd ..
cd include/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/include/

cd ..
cd mkspecs
cd modules
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/mkspecs/modules/
启动QtHttpServer

在Qt官方blog introducing-qt-http-server,介绍了一个最基本的QHttpServer用法:

#include <QtCore>
#include <QtHttpServer>
int main(int argc, char **argv) {
   
  QCoreApplication app(argc, argv);
  QHttpServer httpServer;
  httpServer.route("/", []() {
   
    return "Hello world";
  });
  httpServer.listen(QHostAddress::Any, 9527);
  return app.exec();
}

程序启动后,浏览器打开 就可以看到Hel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigBookX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值