一、描述

QPluginLoader 提供对 Qt 插件的访问。Qt 插件存储在共享库(DLL)中,与使用 QLibrary 访问共享库相比,它具有以下优势:

  • QPluginLoader 检查插件是否链接到与应用程序相同的 Qt 版本。
  • QPluginLoader 提供对根组件对象(instance())的直接访问,而不是强制手动解析 C 函数。

QPluginLoader 对象的实例对单个共享库文件进行操作。它以独立于平台的方式提供对插件功能的访问。

如果插件尚未加载,则 instance() 函数会隐式地尝试加载插件。 QPluginLoader 的多个实例可用于访问同一个物理插件。加载后,插件将保留在内存中,直到卸载了 QPluginLoader 的所有实例,或者直到应用程序终止。

二、属性成员

1、fileName:QString

此属性保存插件的文件名。

建议在文件名中省略文件的后缀,因为 QPluginLoader 将自动查找具有适当后缀的文件。

加载插件时,QPluginLoader 会搜索 QCoreApplication::libraryPaths() 指定的所有插件位置,除非文件名有绝对路径。 成功加载插件后,fileName() 返回插件的完整路径。

2、loadHints:QLibrary::LoadHints

load() 函数载入插件的提示。

三、成员函数

1、~QPluginLoader()

销毁 QPluginLoader 对象。

除非显式调用 unload(),否则插件会一直保留在内存中,直到应用程序终止。

2、QString errorString()

返回对发生的最后一个错误的描述。

3、QObject * instance()

返回插件的根组件对象。 必要时加载插件。如果无法加载插件或无法实例化根组件对象,则该函数返回 nullptr。

如果根组件对象被销毁,则调用此函数会创建一个新实例。

该函数返回的根组件在 QPluginLoader 销毁时不会被删除。 如果要确保删除根组件,则应在不再需要访问核心组件时立即调用 unload()。 当库最终卸载时,根组件将自动删除。

组件对象是一个 QObject。 使用 qobject_cast() 可将其转成所需的对象。

4、bool isLoaded()

插件是否已加载。

5、bool load()

加载插件,如果插件加载成功则返回true; 否则返回false。因为 instance() 总是在解析任何符号之前调用这个函数,所以没有必要显式调用它。

6、QJsonObject metaData()

返回此插件的元数据。 元数据是在编译插件时使用 Q_PLUGIN_METADATA() 宏以 json 格式指定的数据。

无需实际加载插件即可以快速且廉价的方式查询元数据。这使得可以例如将插件的功能存储在那里,并根据此元数据决定是否加载插件。 

7、[static] QObjectList staticInstances()

返回插件加载器持有的静态插件实例(根组件)列表。

8、[static] QList<QStaticPlugin> staticPlugins()

返回插件加载器持有的 QStaticPlugins 列表。 该函数与 staticInstances() 类似,但 QStaticPlugin 也包含元数据信息。

9、bool unload()

卸载插件,如果插件可以卸载则返回true,否则返回false。

这在应用程序终止时自动发生,因此通常不需要调用此函数。

如果 QPluginLoader 的其他实例正在使用相同的插件,则调用将失败,并且只有在每个实例都调用了 unload() 时才会发生卸载。

不要尝试删除根组件。 而是依靠 unload() 会在需要时自动删除它

四、相关非成员

1、void qRegisterStaticPluginFunction(QStaticPlugin plugin)

注册插件加载器指定的插件,并由 Q_IMPORT_PLUGIN() 使用。

Qt插件:QPluginLoader相关推荐

  1. qt插件元数据不包含一个有效的元数据_Qt5个人软件插件使用(低级API)

    前言 今天想看一些Qt 插件系统.看了之后发现Qt支持两种插件方式:高级 API 和低级 API. 高级 API 指的的为Qt软件本身定制插件: 低级 API 指的是为自己写的软件定制插件. 这篇文章 ...

  2. Qt文档阅读笔记-Qt插件DECLARE_INTERFACE METADATA INTERFACES官方解析及实例

    目录 官方解析 Q_DECLARE_INTERFACE Q_PLUGIN_METADATA Q_INTERFACES 博主栗子 官方解析 Q_DECLARE_INTERFACE 此宏用于把标识符与类名 ...

  3. Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL

    目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...

  4. Qt 插件学习(一)

    插件是什么 注意:这儿暂时不考虑静态插件(潜意识中总觉得它根本就不算插件). 插件是一个动态库(共享库).动态库是一个独立的文件中的独立模块,可被多个程序访问. 先看动态库的两种用法 1. 程序链接时 ...

  5. Qt插件机制介绍及实现

    Qt插件机制介绍及实现 创建应用程序主窗口 创建Qt项目 编辑项目文件ImageView.pro mainwindow.cpp main.cpp mainwindow.cpp 编译运行 插件接口 实现 ...

  6. 我的QT Creator学习笔记(二十一)——Qt国际化和Qt插件

    参考文献:<Qt Creator 快速入门>第三版 霍亚飞编著 一.国际化 Qt可以使用Qt Linguist工具完成应用程序的翻译工作,生成.qm文件,然后在不同情况下为应用程序安装不同 ...

  7. 构建自己的 Qt 插件系统

    简述 Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处. 根据 深入理解插件系统  ...

  8. vs2010 Qt插件报错Couldn't register all Qt4VSAddin command解决方案

    打开vs2010,也不存在qt插件: 1.更新你的VS2010到sp1: 2.cmd执行以下命令:(是一个命令,注意32位或者64位路经可能不同确认2个路径的文件存在再执行,否则安装sdk.) win ...

  9. qt插件元数据不包含一个有效的元数据_qt creator源码全方面分析(2-10-2)

    Creating Your First Plugin 本节介绍,如何使用Qt Creator提供的插件模板,来创建Qt Creator插件,并获取对插件的组成和结构的第一印象. 创建一个插件项目 Qt ...

最新文章

  1. 【转载】MSXML应用总结 开发篇(下)
  2. linux 磁盘诡异的被占用
  3. 【Python基础】字符串专题总结
  4. .NET Core前后端分离快速开发框架(Core.3.1+AntdVue)
  5. Java中的低GC:使用原语而不是包装器
  6. leetcode647 回文子串
  7. Bootstrap3 表格的情景类
  8. 国产操作系统往事:四十年激变,终再起风云
  9. 网络流24题(更新中
  10. [原创]消灭eclipse中运行启动的错误:“找不到或无法加载主类”问题
  11. 正态性检验(Normality test)
  12. 软件后台《积分制 / 绩效考核表》管理制度
  13. 地坛——我的最爱 (2006-11-12 09:33:18)
  14. 区块链网络管理平台WeBASE双节点可视化部署
  15. 证明 可逆矩阵A的各列线性无关
  16. 计算机应用程序无响应,Win7系统运行Word文档提示“应用程序没有响应”怎么办...
  17. TCP快速连接(tfo,TCP fastopen)
  18. python中的结束用语_python结束语句
  19. 10 万阿里人都爱用的网红工具,语雀如何“用保护钱包的技术在保护文档安全​”?...
  20. 视频中的音频如何提取出来?分享简单好用的提取方法

热门文章

  1. 数海信息集团CEO刘志欣2022年新年致辞:踔厉奋发 数智领航
  2. 前装车载手机无线充电搭载“翻倍”增长,市场份额争夺战白热化
  3. wps论文参考文献变动时自动更新
  4. 数据可视化工具之常见的折线图与折现面积图分析
  5. 【C语言经典面试题】这样的char * 定义怎么回事
  6. 前端三剑客:HTML
  7. google浏览器到前进键和后退键分别是什么
  8. 2013年12月4日周2
  9. springboot 启动非常慢(超过80秒)解决方案
  10. 婚恋交友源码开发,实现图片的滑动切换