本框架是在个人在做项目中总结出来的一套Qt客户端框架,基于http调用接口和websocket接收服务器通知,前端使用qml。 其中业务请求逻辑使用的是C++逻辑。为了后期方便使用,特此记录下来方便以后客户端的搭建。

框架简介:

1.本框架采用Qml写前端页面,页面逻辑使用JS, 请求接收逻辑采用C++。

2.事件中转单例,qml和C++可同时开发,通过事件中转隔离前端和逻辑。

3. 基本配置文件类和全局变量类和调试类使得开发业务更加方便。

4.C++多线程部分亲测没问题。业务请求和接收全部在自己单独的线程中。

代码简介:

事件中转单例模式:Tool类

public:static Tool* getInstance();signals://前端调用void testEnter();//后端抛出void error(const QString &shortError, const QString &longError);

后端业务逻辑开启类

/***************************************************************************** @brief  事件处理,后端事件接收类* 主线程:处理中转事件* 线程1:websocket线程,接收服务器推送信息* 线程2: http线程, 调用服务器接口****************************************************************************/
#include <QObject>
#include <memory>
class Tool;
class Tool_websocket;
class Tool_httpRequest;class Tool_transfer : public QObject
{Q_OBJECT
public:explicit Tool_transfer(QObject *parent = nullptr);~Tool_transfer();
signals:  void start(); //启动所有线程private slots:void onError(const QString &shortError, const QString &longError = QString());void onTestEnter();
private:void init();std::unique_ptr<Tool_websocket> m_websocket;std::unique_ptr<Tool_httpRequest> m_httpRequest;
};

websocket 类


/***************************************************************************** @brief  websocket类,接收服务器的推送信息****************************************************************************/
#include <QObject>
#include <QWebSocket>class Tool_websocket : public QObject
{Q_OBJECT
public:explicit Tool_websocket(QObject *parent = nullptr);~Tool_websocket();
signals://调用void start();//抛出void error(const QString &shortError, const QString &longError = QString());private slots:void onStart();void onConnected();void onDisconnected();void onError(QAbstractSocket::SocketError error);
#ifndef QT_NO_SSLvoid onSslErrors(const QList<QSslError> &errors);
#endifvoid onTextMessageReceived(const QString &message);void onBinaryMessageReceived(const QByteArray &data);private:QWebSocket * m_pWebSocket;
};

websocket心跳

    //定时器处理重连m_timerConn = new QTimer(this);connect(m_timerConn, SIGNAL(timeout()), this, SLOT(checkConn()));m_timerConn->setInterval(3000);//定时器发送心跳m_timerHeart = new QTimer(this);connect(m_timerHeart, SIGNAL(timeout()), this, SLOT(sendHeart()));m_timerHeart->setInterval(2000);void Tool_websocket::checkConn()
{QDateTime now = QDateTime::currentDateTime();if (m_lastTime.secsTo(now) >= m_timeOut) {     //当前时间和上次接收到消息的时间 > 设置的超时时间, 若心跳(2秒一次)正常,永远不会重连xdebug << "正在重连!";isConnection = false;m_pWebSocket->open(m_serverUrl);}
}

httpBase类


/***************************************************************************** @brief  http接口调用类,封装了常用和基本的http请求接口****************************************************************************/#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>class Tool_httpbase : public QObject
{Q_OBJECT
public:explicit Tool_httpbase(QObject *parent = nullptr, QString serverUrl = "");~Tool_httpbase();// 异步get请求void get(const QUrl &url, const QVariantMap &para);// 同步get请求bool waitGet(const QUrl &url, const QVariantMap &para,QJsonObject &responseJsonObject, QString &shortError, QString &longError);// 同步get下载文件bool waitGet(const QUrl &url, QByteArray &fileData,QString &shortError, QString &longError);// 异步post请求void post(const QUrl &url, const QJsonObject &body);// 同步post请求bool waitPost(const QUrl &url, const QJsonObject &body,QJsonObject &responseJsonObject, QString &shortError, QString &longError);// 异步post传输表单文件void post(const QUrl &url, QHttpMultiPart *multiPart);// 同步post传输表单文件bool waitPost(const QUrl &url, QHttpMultiPart *multiPart,QJsonObject &responseJsonObject, QString &shortError, QString &longError);
signals:void response(const QJsonObject &reponse);void error(const QString &shortError, const QString &longError = QString());private slots:void onHttpFinished(QNetworkReply *reply);void onHttpReadyRead();
#ifndef QT_NO_SSLstatic void onSslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
#endifvoid onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);void onErrorOccurred(QNetworkReply::NetworkError error);private:void init();QString m_serverUrl;std::unique_ptr<QNetworkAccessManager> m_pNetworkAM;
};

qml 前端人员怎么调用事件和接收事件

    Component.onCompleted: {tool.testEnter()}Connections {target: toolfunction onError(shortError, longError) {console.log(shortError, longError)}}

程序配置和其他封装类(配置文件类,全局数据类,调试类,通用方法类)

项目源码:test0908.rar-互联网文档类资源-CSDN下载, 欢迎互相交流

QT客户端框架(http + websocket+QML)相关推荐

  1. jfinal html5,Jfinal框架整合webSocket技术功能实现

    技术难度:简单 在这里我会用最简单的方法实现JFinal框架结合webSocket最基础的功能,以至于后续业务的拓展需要小伙伴们依据实际情况去实现相应的开发! 废话不多说,直接上代码! 1.编写web ...

  2. netty框架实现websocket达到高并发

    websocket(三) 进阶!netty框架实现websocket达到高并发 引言: 在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法.但是在实际项目中,那 ...

  3. css3 wshtml_swoft框架之websocket服务的简单使用

    本篇博文相关环境版本如下: OS系统:CentOS Linux release 7.7 php版本:PHP 7.2.24 swoole版本:4.4.14 swoft版本:2.0.7 swoft框架的介 ...

  4. Qt 5.12学习笔记--QML性能策略

    Qt 5.12学习笔记--QML性能策略 1 简介 2 时间因素 2 性能分析 3 JavaScript 部分 4 绑定 5 类型转换 6 解析属性 6 属性绑定 7 序列提示(Sequence ti ...

  5. 轻量级HTTP客户端框架—Forest学习笔记

    轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...

  6. Forest一款轻量级HTTP客户端框架

    Forest一款轻量级HTTP客户端框架 Forest Forest特性 Forest工作原理 Forest架构 HttpClient Okhttp Forest Forest 是一个开源的 Java ...

  7. 互联网江湖,桌面客户端框架技术比武大会

    By 技术怪咖 欧阳森林 导读:在互联网时代,如何将一个好的idea快速的转化为产品,如何在原有产品中增加新的特性,是产品能够快速的推向市场.快速占领的关键.因此,作为客户端的架构选型,面临哪几方面的 ...

  8. 关于Qt客户端程序开发的一些思考

    最近一直忙于新项目Qt客户端程序的开发工作,对于整个项目开发中的一些坑点做一些总结,余惟愿诸友远避之. 1.关于UI界面开发.我的建议是,能用贴图就贴图.尽管我们知道Qt提供了"强大&quo ...

  9. 若依前后端分离框架集成websocket

    1. 若依不分离框架集成websocket可以参照http://doc.ruoyi.vip/ruoyi/document/cjjc.html#%E9%9B%86%E6%88%90websocket%E ...

最新文章

  1. java操作跨页的word cell,“excle如何打印不出现断行“EXCEL中,如何不跨页断行打印或显示,谢谢...
  2. Linux01-基本操作与Shell
  3. mpVue配置sass全局变量
  4. linux 重启命令_如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务 | Linux 中国...
  5. Linux kernel的中断子系统之(九):tasklet
  6. 哈希表(hashtable)的javascript简单实现
  7. logback+slf4j作为日志系统
  8. C++ 控制对象的创建方式和数量
  9. 每日算法系列【LeetCode 556】下一个更大元素 III
  10. 多种平面设计排版版型,轻松为你解决排版难题
  11. LED串联并联驱动方式分析
  12. 图解CSS3 Flexbox属性
  13. 银行数字化转型导师坚鹏:基于招商银行案例研究的银行APP运营
  14. noip普及组2007 守望者的逃离
  15. 如何在微信公众号的文章推送中展示bilibili的视频
  16. 计算机专业相关的职业技术证书有哪些,你知道吗?
  17. JavaWeb商城项目笔记--- Day1 (热门商品,热销商品)
  18. 大型企业局域网安全解决方案
  19. 对不起,我们的专业不是万能的
  20. 泛微ecology 公文管理功能相关的几张表

热门文章

  1. 趣味翻译:没有自行车的鱼?
  2. 「雷锋前线」攻破一把智能门锁的N种方法
  3. 移动网络无线网断开怎么连接服务器,多数人都弄错! 手机连WiFi后要不要断开移动网络?...
  4. Mac电脑截图快捷键 1
  5. 给自己“帅气”的脸蛋动漫化吧——PyQt5之漫画脸GUI界面(保姆级教程)
  6. Deepin-wine QQ 默认字体变为楷体的修改方法
  7. 设计模式--抽象工厂设计
  8. android studio设置工具栏,Android Studio 工具栏添加图标
  9. 2020年淘宝天猫双十一成交额突破新高,倍赞网祝商家继续大卖
  10. 单片机 ADC0809模数转换实验