上位机图像处理和嵌入式模块部署(改进的qmacvisual动态插件卸载)

本文主要是介绍上位机图像处理和嵌入式模块部署(改进的qmacvisual动态插件卸载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们讨论过,qmacvisual虽然提供了很多的功能,包括的种类很多,但是总有一些功能是客户希望定制的。这些都是难免的。这个时候,就需要自己编写代码来实现相关功能。目前,在qmacvisual上面是通过扩展库容器和扩展插件来实现的。使用上还是非常方便的。

        但是呢,这里面还是存在一个小问题,个人觉得使用上面有待改进。那就是如果需要扩展库来加载扩展插件的时候,如果插件有一些bug需要处理、修改代码的时候,想重新加载的话是没法做到的,因为根本没有办法编译成功。这里面最主要的原因,就是qmacvisual还在加载dll文件,所以,这个时候就需要关闭qmacvisual,才能重新编译、重新加载,这在使用上面就特别不方便。所以,我们可以在作者原来的基础之上,修改相关的功能,这样使用起来更方便。

1、添加一个按钮

        之前扩展库上面是没有卸载按钮的,这个时候就需要在ui界面添加一个卸载按钮。这一步可以通过qt designer来完成。

        如图所示,我们添加了一个clear按钮,大家先忽略它的背景颜色。这个按钮最主要的功能就是卸载dll。

2、在frmExtensionLibrary.h添加变量

        之前动态库加载的时候都是通过临时变量实现的。所以,我们需要把局部变量QLibrary mylib提炼到头文件当中。并且,还需要添加相应的头文件声明,

#include <QLibrary>

        当然,还有一个函数声明,这个后面再说。

void on_btnClear_clicked();

3、更新frmExtensionLibrary.cpp文件

        在cpp文件当中有两个地方需要设置。第一,就是需要把file_name换一种方式加载,即mylib.setFileName(file_name)。之前都是直接类声明的时候就创建好了的。第二,就是给刚才的按钮添加回调函数。它的功能就是卸载dll文件。当然相应的函数声明,也是要在h文件中添加一下的。

void frmExtensionLibrary::on_btnClear_clicked()
{if (!dirPath.isNull()){if (frmPage){delete frmPage;frmPage = NULL;}mylib.unload();dirPath = "";}
}

        大家如果细心一点,应该发现这里没有用connect进行bind,这其实是qt的一个trick。只要符合一定的规则,系统可以自己找到对应的回调函数的。

4、测试和验证

        测试的话,就相对比较简单的。一开始我们按照正常的逻辑进行配置,如果ok的话,就可以正常使用插件里面的功能。接下来就是单击clear按钮,就可以重新修改、编译ExtLibraryCase里面的代码。如果没有问题,代表我们的修改是正确的;否则大家就要看下是不是哪里修改错了。

        做好了这一点之后,大家如果需要修改插件代码的话,就不需要频繁关闭、打开qmacvisual了,使用上面十分方便。

这篇关于上位机图像处理和嵌入式模块部署(改进的qmacvisual动态插件卸载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897775

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更