Qt创建基于应用程序的插件

应用程序插件

  • 什么是插件
  • 插件的好处
  • 插件的种类
  • 应用程序插件
    • 创建应用程序的插件步骤:
    • 创建测试插件的应用程序步骤:
    • 应用程序插件示例
      • 开发环境
      • 创建示例
      • 生成插件
      • 运行结果
  • 总结

什么是插件

插件是一种用于应用程序功能扩展和增强,且按照特定规范编写的应用程序接口的程序。

插件的好处

可以用于应用程序的功能扩展,同时可在程序运行时动态的加载、卸载。
其相对于动态库而言,即使dll不存在,应用程序也可正常运行,只是插件的功能不能使用。
动态库需要访问lib文件,且必须保证dll存在,否则程序无法正常启动。

插件的种类

Qt插件就相当于一个共享库。但是由于动态库又一定的区别。
在Qt插件中,可以分为两种:

1. 用于应用程序扩展的插件,也叫低级的API;
2. 用于Qt自身扩展,也称为高级API。如自定义数据库驱动,文本编码,图片格式和自定义样式等。

本文主要讲解基于应用程序扩展的低级API,即应用程序插件。

应用程序插件

创建应用程序插件,分为两部分:一部分创建应用程序的插件;
一部分创建测试,也就是使用插件的应用程序。

创建应用程序的插件步骤:

  1. 继承QObject和接口类,实现接口类中的功能函数;
  2. 使用Q_PLUGIN_METADATA()宏向元对象系统注册接口类;
  3. 使用Q_INTERFACES()宏导出插件;
  4. 编写能够生成插件的pro文件。
    注意:这里的接口类实际是一个内部含有纯虚函数的抽象类。C++中没有接口类一说。以下本文中的所有接口类指的都是抽象类。

创建测试插件的应用程序步骤:

  1. 创建一个接口类;
  2. 使用Q_DECLARE_INTERFACE()宏在Qt元对象系统中注册接口类;
  3. 使用插件加载器QPluginLoader加载插件;
  4. 使用qobject_cast()来测试插件是否实现了给定功能。

应用程序插件示例

开发环境

在这里插入图片描述
我这里是基于Qt6.6.0,且使用的是QtCreator编译时使用的MSVC2019 64bit的编译器。
这个是为了后续的基于Qt自身的插件,专门更改的环境。

创建示例

首先打开QtCreator,点击菜单栏的文件-》新建项目,弹出如下弹窗:
在这里插入图片描述
选择项目中的其它项目,对应的子目录项目,点击选择按钮,弹出如下弹窗:
在这里插入图片描述
在名称后面的编辑框输入项目文件夹的名称MyPlugin,同时在创建路径的编辑框中选择要将文件存储的位置(自己选择就行,路径中不能含有中文),点击下一步按钮,弹出如下弹窗:
在这里插入图片描述
勾选要使用的编译器,我这里选择的是Qt6.6.0 MSVC2019 64bit的编译器,点击下一步。弹出如下弹窗:
在这里插入图片描述
点击完成&添加子项目按钮。弹出如下弹窗:
在这里插入图片描述
选择其他项目下的子目录项目,点击选择按钮,图中红色的线已经圈出。弹出如下:
在这里插入图片描述
输入子项目的名称Plugin,选择创建路径,一般这里的路径采用默认的方式,为之前创建的子目录项目MyPlugin所在的路径下创建子项目。之后,点击下一步,弹出弹窗:
在这里插入图片描述
点击完成&添加子项目按钮。会继续弹窗如下的弹窗:
在这里插入图片描述
点击取消按钮。
至此插件项目的项目文件夹Plugin有了,还需创建使用插件的应用程序的项目。
在项目文件夹MyPlugin上点击右键,弹出菜单栏,选择创建新子项目,弹出:
在这里插入图片描述
选择Application(Qt)——》Qt Widgets Applicatin,创建基于Qt的应用程序。这个程序用于最终插件的测试,也就是使用插件的程序。点击选择按钮。弹出:
在这里插入图片描述
输入项目名称PluginWindow,创建路径采用默认的即可,这里都默认路径为创建子目录项目时的路径,也就是创建的插件项目Plugin和应用程序项目PluginWindow都是MyPlugin的子目录项目。点击下一步按钮,弹出弹窗:
在这里插入图片描述
继续点击下一步按钮,弹出弹窗:
在这里插入图片描述
这里使用默认的也行,本示例代码提供的是基于QWidget的应用程序,创建基于Qt的应用程序,这不是本文的重点。点击下一步按钮。弹出弹窗后,继续点击下一步按钮,弹出:
在这里插入图片描述
这里需要勾选与插件项目一样的编译器选项,反正就是选择一样的编译器就行,我这里依旧还是Qt6.6.0 MSVC2019 64bit编译器。点击下一步按钮。弹出弹窗后,点击完成按钮。
此时可以看到项目的结构类似于如下所示这样:
在这里插入图片描述
展开后是类似下面这样的:
在这里插入图片描述
此时,插件项目Plugin中只有一个pro文件,将来使用插件的应用程序PluginWindow中也缺少一个接口类文件。
这个项目结构的截图只是提供了创建一个插件和使用插件的应用程序的整个创建步骤中的一个环节,并非本示例创建过程中对应的项目结构。

接下来向使用插件的应用程序项目PluginWindow添加接口类。
在基于Qt创建的应用程序项目PluginWindow上,右键出现菜单,选择添加新文件,弹出:
在这里插入图片描述
选择C/C++——》C/C++ Header File,然后点击选择按钮,弹出:
在这里插入图片描述
输入文件名,即抽象类的类名PluginInterface,也是接口类,路径默认就可以,点击下一步按钮。然后再在弹出窗口中点击完成按钮。此时使用插件的应用程序项目下新增一个头文件。如下:
在这里插入图片描述
接下来在插件类项目Plugin的pro文件中修改器内容为下(如果不修改pro文件,这里无法添加新文件,需先修改pro文件):

CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(myPlugin)
TEMPLATE    = lib
INCLUDEPATH += ../PluginWindow
DESTDIR = ../Plugins

然后在该插件项目Plugin上右击,弹出菜单中选择添加新文件,弹出:
在这里插入图片描述
选择C/C++——>C/C++ Class,点击选择按钮。弹出:
在这里插入图片描述
输入类名Plugin,会在下面的头文件和源文件处生成对应的文件名plugin.h,plugin.cpp,不用选择基类,当然这里可以手动输入之前在使用插件的应用程序中创建的接口类的类名PluginInterface作为基类,同时勾选Include QObject,点击下一步按钮,弹出的弹框中点击完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 自定义快捷指令(docker

vi /root/.bashrc alias disdocker images alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 保存退出后使用sourece /root/.bashrc 让其立即生效 sourece /root/.bashrc

Python学习笔记(37)——用xlwings库生成excel

老规矩先pip入xlwings库 STEP1:下载xlwings库 windowsr>>cmd>>pip install xlwings (如果需要不同版本可以到pypi上搜) STEP2:完成EXCEL初级创建 请打开您的编写软件~~~~~(小编的显示结果为PYCHARM编写的,因为颜色标注好看(…

【论文笔记】PointMamba: A Simple State Space Model for Point Cloud Analysis

原文链接:https://arxiv.org/abs/2402.10739 1. 引言 基于Transformer的点云分析方法有二次时空复杂度,一些方法通过限制感受野降低计算。这引出了一个问题:如何设计方法实现线性复杂度并有全局感受野。 状态空间模型(SSM&…

蓝桥杯 — — 纯质数

纯质数 题目: 思路: 一个最简单的思路就是枚举出所有的质数,然后再判断这个质数是否是一个纯质数。 枚举出所有的质数: 可以使用常规的暴力求解法,其时间复杂度为( O ( N N ) O(N\sqrt{N}) O(NN ​)&…

SQL12 获取每个部门中当前员工薪水最高的相关信息

题目:获取每个部门中当前员工薪水最高的相关信息 注意了,这道题目,分组函数只能查出来:每个部门的最高薪水,group by dept_no ,根据部门分组,绝对不能group by dept_no,emp_no,不能…

学习一门语言的方法和套路(B站转述)

视频链接 up虽然长相英(ping)俊(ping),但是讲的干活,没恰饭。 学习流程: 1.快速阅读,掌握概况 2.深入细节内容 例如:java (JDBC)、html 、netty 不管三七二十一,先了解套路,再深入研究。 高…

2024软考中项考哪个版本?应该该如何备考?

2024年1月,备受瞩目的软考中级系统集成项目管理工程师官方教程终于迎来了久违的大改版。为确保广大考生能够有充足的准备时间,软考中项的考试时间被顺延至同年11月,届时,这也将成为软考中项首次依据第3版考纲进行的考试。 新教材核…

非线性特征曲线线性化插补器(CODESYS 完整ST代码)

1、如何利用博途PLC和信捷PLC实现非线性特征曲线的线性化可以参考下面文章链接: 非线性特征曲线线性化(插补功能块SCL源代码+C代码)_scl直线插补程序-CSDN博客文章浏览阅读382次。信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章…

【Canvas与艺术】绘制磨砂黄铜材质Premium Quality徽章

【关键点】 渐变色的使用、斜纹的实现、底图的寻觅 【成果图】 ​​​​​​​ 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><tit…

计算机网络:数据链路层 - CSMA/CA协议

计算机网络&#xff1a;数据链路层 - CSMA/CA协议 CSMA/CA概述帧间间隔工作原理退避算法虚拟载波监听 CSMA/CA概述 讲解CSMA/CA之前&#xff0c;我们回顾一下CSMA/CD的三个特性&#xff1a; 多址接入MA&#xff1a;多个主机连接在一条总线上&#xff0c;竞争使用总线 载波监听…

腾讯云轻量应用服务器端口开启教程

腾讯云轻量应用服务器端口怎么打开&#xff1f;在轻量应用服务器控制台的防火墙中开启端口&#xff0c;本文腾讯云百科txybk.com以80端口为例&#xff0c;来详细说下轻量应用服务器端口打开教程&#xff0c;另外可以在腾讯云百科 txy.wiki 查看当前轻量服务器最新的优惠券和配置…

大隐市苏州

大隐隐于市的典型&#xff1a;苏州。 中国四大园林&#xff0c;二个在苏州&#xff0c;实际上看多逛多了苏州园林&#xff0c;其它地方的园林真的就是太不精致了~~~~ 哈哈&#xff0c;莫打莫打。 将山水装入庭院&#xff0c;情怀显露山水间。 看似宅男一个&#xff0c;实则依旧…

康耐视visionpro-CoglntersectLineLineTool操作说明工具详细说明

◆CogIntersectLineLineTool功能说明&#xff1a; 创建两条线的交点 备注&#xff1a;在“Geometry-Intersection”选项中的所有工具都是创建两个图形的交点工具&#xff0c;其中包括圆与圆的交点、线与圆的交点、线与线的交点、线与圆的交点等&#xff0c;工具使用的方法相似。…

视频国标学习

总体介绍 GB/T28181协议&#xff0c;全名叫《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff0c;是由中国国家标准委员会发布的一种国家级的标准。它主要对视频监控系统的各个方面做了明确的规定&#xff0c;使得不同厂商生产的视频监控设备能够相互连通&am…

一种基于OpenCV的图片倾斜矫正方法

需求描述&#xff1a; 对倾斜的图片进行矫正&#xff0c;返回倾斜角度和矫正后的图片。 解决方法&#xff1a; 1、各种角度点被投影到一个累加器阵列中&#xff0c;其中倾斜角度可以定义为在最大化对齐的搜索间隔内的投影角度。 2、以不同的角度旋转图像&#xff0c;并为每…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言&#xff1a;2024年4月13日上午&#xff0c;我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店&#xff0c;参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会&#xff08;MAS’2024&#xff09;。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应 CLL Interpreter&#xff0c;如果没有操…

GitHub登录收不到邮箱验证码

由于长时间没有登录GitHub&#xff0c;浏览器可能清除了相应的cookie信息&#xff0c;所以需要对应绑定邮箱进行验证&#xff0c;但因为邮箱长时间没有收到验证码&#xff0c;所以给到以下一种可能解决的方法&#xff1a; 需要输入验证码进行验证 我们可以打开QQ邮箱&#xff0…

java的深入探究JVM之类加载与双亲委派机制

前言 前面学习了虚拟机的内存结构、对象的分配和创建&#xff0c;但对象所对应的类是怎么加载到虚拟机中来的呢&#xff1f;加载过程中需要做些什么&#xff1f;什么是双亲委派机制以及为什么要打破双亲委派机制&#xff1f; 类的生命周期 类的生命周期包含了如上的7个阶段&a…

光场相机建模与畸变校正改进方法

摘要&#xff1a;光场相机作为一种新型的成像系统&#xff0c;可以直接从一次曝光的图像中得到三维信息。为了能够更充分有效地利用光场数据包含的角度和位置信息&#xff0c;完成更加精准的场景深度计算&#xff0c;从而提升光场相机的三维重建的精度&#xff0c;需要实现精确…