1.需求
1.1 用户需要其他平台(web端)调用Qt平台的接口,获取想要的数据并实时显示在网页里,比如实时的温湿度,用户数据等
1.2 用户需要在其他平台(web端)调用Qt平台的接口,下发数据给本地QT客户端显示,如下发用户数据,下发任务等
2.解决方案
这是就需要一个类似httpServer的服务端了,实时监听端口,随时接收web平台的请求,根据请求内容,接收平台下发的数据并存储到本地客户端显示,或者根据请求,上传需要的信息给web平台
现成的接口是没有的,需要自己写,底层本质都是基于QWebServer加上多线程封装实现的,轮子是已经有的,已经造好了,我们用就行了,想深入了解的,可以看源码的实现
我就挂在下面的链接里了,开源的Qt httpServer代码,里面有很多
链接: https://pan.baidu.com/s/1SHqSCGiGQblur69oCz_LXg?pwd=1234 提取码: 1234
3. 实现
建立一个WebServerApi的工程项目,没有界面的,一般后台服务都是没有界面的,更加轻便,反应快,可以建立控制台项目或者动态库/插件库,都可以,我这里用来演示,就用控制台项目演示了
建好工程项目后,在有了已经写好的轮子基础上,就简单了,先把需要的httpServer文件引入程序目录里
然后建一个WebApi1的类,用来表示一个接口类,专门处理Api1接口的内容
#ifndef WEBAPI1_H
#define WEBAPI1_H
#include "httprequesthandler.h"
using namespace stefanfrings;
class WebApi1: public HttpRequestHandler
{
public:
WebApi1(QObject *parent = nullptr);
void service(HttpRequest &request, HttpResponse &response) override;
QJsonObject changeByteArrayToJsonObject(const QByteArray &ba);
};
#endif // WEBAPI1_H
#include "webapi1.h"
#include <QJsonObject>
#include <QJsonDocument>
WebApi1::WebApi1(QObject *parent)
{
}
void WebApi1::service(HttpRequest &request, HttpResponse &response)
{
QString path = request.getPath();
QStringList pathList = path.split("/");
//QString interfaceName = pathList.value(3);
if (pathList.size()<3) {
this->returnError(response);
ret