发布时间:2022-12-18 16:00
QCPFrame 全称Qt-based Commonly-used Plugin Framework。它是一个开源的基于Qt的跨平台插件开发框架,旨在提高基于PC及Linux平台下工控软件设计的通用性,重用性,高效性,可裁剪性,松耦合性。在QCPFrame中,您可以基于控制台或者服务来运行最小插件系统,也可以通过view editor(也是一个插件)来编辑带有UI的桌面程序。在QCPFrame中,一切皆插件,甚至一个后台功能,菜单项,工具栏项,状态栏项,dock片都可以是一个插件。插件在编辑和配置插件,包括它自己,这一切就像是在搭积木,使得模块开发人员只用专注于本模块的开发,而无需过多关注软件系统最终的集成。
【开源】基于Qt的跨平台插件开发框架QCPFrame
前面提到QCPFrame具有通用性,重用性,高效性,可裁剪性,松耦合的特性,那么它在实际开发中,能带来什么好处,让我们来分析一下。
它支持带有UI的应用程序,同时也支持无UI的控制台应用程序。框架本身与业务无关,我们可以将它应用于任何业务方向,换言之,所有二次开发的业务都取决于插件。
它的优势并非“界面可编辑”,对于内核而言,用于组织UI的ViewModel及插件ViewEditor也是可有可无的存在,他们只是作者用于设计UI的一种思路,当你需要一套不同的View样式和思路时,由于内核是独立不变的,那你只需要重新设计View层,而处于业务层的plugin甚至都不用动。
当所有业务都以插件的形式存在时,一些常用的功能可以被写成插件,在不同项目中重复利用将可以大大提高开发效率。它可以是一个无界面的IVI仪器驱动模块,Matlab算法模块,OpenCV图像处理模块,CRC校验模块或者是带UI的串口助手模块,日志管理器模块,文件/目录浏览器模块等等。
合理的业务层设计,可以将大的功能模块分割为小的插件模块,并行开发将大大提高开发的效率,显著缩短开发周期。
另外,如果后期需要对某一个业务单元进行维护升级,并不需要把所有代码拿出来,只需要在特定插件模块中进行。一旦项目所属的开发人员发生更替,对新的开发者而言,缩小了维护范围,使维护工作变得更轻松和安全。
与传统软件框架相比,QCPFrame天生可裁剪,这首先体现在“插件管理器”和“系统管理器”这两个系统级插件上。我们可以轻松在线决定将哪些插件使能,哪些插件被禁用。
另外,QCPFrame原生提供了UI的可编辑功能,通过ViewEditor编辑好的带权限的UI配置,当不同的用户登录进来,UI元素将根据权限决定是否对用户使能。比如游客登入将不能进行任何形式的管理,管理员用户登入只能进行系统管理,用户管理,而超级管理员不仅可以进行前面的管理,还能编辑UI等等。
耦合性大多体现在模块与模块之间,层与层之间的交互上,QCPF_Model提供了不止一种途径用于模块间的松耦合通讯,这在作者【开源】基于Qt的跨平台插件开发框架QCPFrame(二)一节中有讲。
实践证明,松耦合性不仅有利于项目并行开发时的高效性,也有利于后期维护。维护人员在特定模块里的代码改动,将对其他模块构成最小影响,甚至毫无影响。
本章节所述案例都是在QCPFrame的基础上进行二次开发,增加业务层,这包括业务层模型和业务层插件,业务层模型(Model)是业务层其他模块与QCPFrame的Core和View通讯的中介,它使QCPFrame所有特性为该业务方向服务。
自动测试系统具有自动化测试程度高,量产效率高等特征,被广泛应用于测试测量系统中,该案例用于航空自动化测试系统。
QCPF_Model,QCPF_ViewModel,QCPF_HostView,QCPF_PluginManager,QCPF_SystemManager,QCPF_UserManager,QCPF_ViewEditor。
ATSModel(自动测试业务层模型),Information(信息输出插件),FileExplore(文件浏览器插件),Logger(日志输出插件),UI-3500(某UUT测试序列插件),Self-Check(系统自检插件),Report(测试报告预览、打印插件)。
在完成二次开发后,QCPFrame摇身一变成为“插件式自动测试开发平台”,即开发者在QCPFrame框架下基于ATSModel业务开发“自动测试序列插件”,每多使能一个“自动测试序列插件”在下图左侧“测试程序”下拉框就会多一个可选项。ATSModel用于控制测试程序的开始,停止,暂停,测试序列管理,测试信息输入,测试项管理等一系列业务。它是测试序列与QCPFrame沟通的桥梁。
另外,在该项目中,FileExplore(文件浏览器插件),Logger(日志输出插件)两个模块被设计成与业务无关,他们基于QCPF_Model的通用特性,使得其能够被后续其他业务方向的平台二次开发所重用。
图1. 基于QCPFrame的航空自动测试平台
图2. 航空自动测试平台系统管理器
图3. 航空自动测试平台测试序列插件管理器
图4. 航空自动测试平台UI编辑器
无人机监控系统用于地面站系统对无人机进行监视,控制,飞行任务下发,数据下载等功能。
QCPF_Model,QCPF_ViewModel,QCPF_HostView,QCPF_PluginManager,QCPF_SystemManager,QCPF_UserManager,QCPF_ViewEditor。
UAVModel(无人机监控系统业务层模型),无线电数传插件,数据采集插件,数据分析插件,图像处理插件,地理位置插件,路径规划插件,机载计算机管理插件,mqtt通讯插件,系统自检插件,日志输出插件,测试报告预览、打印插件等。
在完成二次开发后,QCPFrame变为“插件式无人机监控开发平台”,即开发者在QCPFrame框架下基于UAVModel业务开发“地面站业务相关插件”。UAVModel是地面站业务层与QCPFrame沟通的桥梁。
图5. 基于QCPFrame的地面站平台