当前位置: 首页 > news >正文

深圳外贸网站沈阳旅游团购网站建设

深圳外贸网站,沈阳旅游团购网站建设,网址代理访问,成都私人做网站建设0.前言 最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都…

0.前言

最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都是基于反射和配置文件生成的,通过修改配置文件就能实现控制流程的修改。
该框架分为基本模块、通讯层、设备层、指令层、控制层五个核心模块,上层调用下层,主要通过Manager单例读取配置json文件,创建并配置对应实体,再将实体指针由Manager管理,可以有效防止内存泄漏等问题。
项目gitee地址

1.基本模块

定义了BaseFactory、BaseItem、BaseManager三个底层基类,BaseFactory定义了类型注册和实体创建两个方法,主要用于每个模块内的实体创建工作。

#pragma execution_character_set("utf-8")
#ifndef BASEFACTORY_H
#define BASEFACTORY_H
#include <QObject>
#include <QMap>
#include <QDebug>
#include "BaseItem.h"class BaseFactory
{
public:BaseFactory();virtual BaseItem* CreateInstance(QString concreteType);template <typename T1>int Register(){int preCount=_map.count();const QMetaObject& meta = T1::staticMetaObject;_map.insert(meta.className(),&meta);if(preCount+1!=_map.count()){throw QString("%1注册失败,请检查!").arg(meta.className());}return _map.count();}protected:QMap<QString,const QMetaObject*> _map;
};

BaseItem主要定义了框架内所有实体的配置接口和配置文件创建接口

#pragma execution_character_set("utf-8")
#ifndef BASEITEM_H
#define BASEITEM_H#include <QObject>
#include <QJsonObject>
#include <QJsonDocument>
#include <QException>
#include <QSharedPointer>
#include <QDebug>
#include "InterruptedException.h"class BaseItem : public QObject
{Q_OBJECT
public:explicit BaseItem(QObject *parent = nullptr);QString Name();void SetName(QString name);virtual void SetConfig(QJsonObject obj);virtual QJsonObject Config();virtual void SetOtherConfig(QJsonObject other);virtual bool Init();virtual QWidget* GetConfigWidget();virtual QSharedPointer<QWidget> GetConfigWidgetZZZ();protected:QString _name;QJsonObject _obj;QJsonObject _other;signals:public slots:
};#endif // BASEITEM_H

BaseManager主要定义了Manager类的的基本方法,主要通过读取配置文件,使用工厂模式创建对应的实体对象,再将配置文件中的json对象参数传入对象完成初始化,最后再将这些实体对象指针通放入QList容器,简化对象的管理和监控。
在这里插入图片描述

2.通讯层

定义了SendReply、Publisher、Subscriber、Requester、Replyer、Modbus物种基本的通讯类。并且实现了SendReply、Modbus通讯方式的网口和串口模式,基于zmq实现了Publisher、Subscriber、Requester、Replyer四种通讯模式。
CommunicationManger创建并且管理这些通讯实例,并且具有通讯监控、断线重连等功能,方便再设备运行期间对通讯状态的异常排查。
在这里插入图片描述

3.设备层

定义了IO模块、测距仪、电机控制器等常用设备,完成了不同品牌的具体实现
在这里插入图片描述

4.指令层/控制层

整体业务核心部分,将所有软件执行流程分为分解为多个指令,内部通告异常抛出实现控制流程的中断,大大简化控制流程,通过调整不同指令的位置,可以实现控制流程的自由组合。通过设置不同的权重,可以实现进度报告等功能。

5.中断

将整体业务执行流程分为瞬态控制和等待,在每个等待中使用WaitMs(int time)方法实现业务的中断功能。

#pragma execution_character_set("utf-8")#include "WaitUtils.h"
#include <QTime>
#include <QDebug>
#include <QCoreApplication>
#include <QElapsedTimer>WaitUtils::WaitUtils(QObject *parent) : QObject(parent)
{}bool WaitUtils::_isRunning=false;void WaitUtils::WaitMs(int time)
{//多处调用displayProgress该变量且有的时true有的时false时会导致进度显示异常,想不通。。。QElapsedTimer ela;ela.start();while (ela.elapsed() < time){CheckIsRunning();QCoreApplication::processEvents(QEventLoop::AllEvents, 100);}
}void WaitUtils::WaitMsNoException(int msec)
{//多处调用displayProgress该变量且有的时true有的时false时会导致进度显示异常,想不通。。。QElapsedTimer ela;ela.start();while (ela.elapsed() < msec){QCoreApplication::processEvents(QEventLoop::AllEvents, 300);}
}void WaitUtils::Reset()
{_isRunning=true;
}void WaitUtils::Stop()
{_isRunning=false;
}void WaitUtils::WaitMsNoProgress(int time)
{QElapsedTimer ela;ela.start();while (ela.elapsed() < time){CheckIsRunning();QCoreApplication::processEvents(QEventLoop::AllEvents, 300);}
}void WaitUtils::CheckIsRunning()
{if(!_isRunning){throw QString("流程中止");}
}

7.设计模式

本框架主要使用指令模式、工厂模式、模板模式这三种设计模式,感兴趣的读者可以去看看gof的《设计模式》。

http://www.yayakq.cn/news/324979/

相关文章:

  • 摄影网站模板下载今天郑州新闻头条
  • 慕课网网站建设目的网站ip改变 备案
  • 杭州网站建设 双收微信推广方式都有哪些
  • 石家庄城乡建设网站专业网站建设模板
  • 商城网站标题wordpress不能发布
  • 徐州市贾汪区建设局网站网站的制作步骤
  • dw个人网站设计模板营销型企业网站有哪些类型
  • 郑州天道做网站舟山网站建设公司
  • 做视频网站需要多大空间开展网络营销的企业
  • 公司年前做网站好处找产品厂家用哪个app
  • iis网站改端口微信公众号免费模板网站
  • 广州比较好的网站建设企业长沙网站建设排名
  • 珠海网站制作推荐深圳有哪些知名企业
  • 虚拟商品交易网站建设用户界面设计的基本原则
  • 网站描述标签优化做软件常用的网站
  • wordpress网站采集插件廊坊网站制作推广
  • 郑州网站营销推广嘉兴手机模板建站
  • 做网站和管理系统网站app的意义
  • 专业企业网站开发公司深圳建网站兴田德润很好
  • 网站建设教程赚找湖南岚鸿认 可wordpress网站下方
  • 韶关网站建设制作济源市建设工程管理处网站
  • 网站教人做核能灯做高端企业网站
  • 电子政务门户网站建设汇报产品开发岗位职责
  • 装修网站开发思路做网站需要的素材照片
  • 品牌网站建设小蝌蚪1a互联网信息服务
  • 360度搜索建站网wordpress参考文档
  • 网站做签到功能律师网站深圳网站设计
  • 账号权重查询入口站长工具wordpress不能实现静态化
  • ngrok做网站服务器阿里巴巴网站策划书
  • 淘宝网站推广怎么做公司起名字大全免费2个字