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

网站开发需要技术简单的网站设计图

网站开发需要技术,简单的网站设计图,嘉兴做微网站设计,拖拽建站系统源码文章目录 一、简介二、常用方法2.1 构造函数2.2 动态加载方法——load()2.3 检查是否加载成功——isLoaded()2.4 访问插件中的根组件——instance()2.5 卸载插件——unload() 一、简介 QPluginLoader 类在运行时加载插件。 QPluginLoader 提供对Qt插件的访问。Qt插件存储在共享…

文章目录

  • 一、简介
  • 二、常用方法
    • 2.1 构造函数
    • 2.2 动态加载方法——load()
    • 2.3 检查是否加载成功——isLoaded()
    • 2.4 访问插件中的根组件——instance()
    • 2.5 卸载插件——unload()

一、简介

QPluginLoader 类在运行时加载插件。

QPluginLoader 提供对Qt插件的访问。Qt插件存储在共享库(如 DLL 文件)中,相比于 QLibrary访问的共享库, QPluginLoader 具有以下优点:

  • QPluginLoader 会检查插件是否与应用程序使用的Qt版本一致;
  • QPluginLoader 提供对根组件对象 (instance())的直接访问,而无需动手解析C函数

QPluginLoader 对象的实例操作单个共享库文件,这个共享库文件被称为插件。它以独立于平台的方式提供对插件中功能的访问。要指定要加载的插件,请在构造函数中传递文件名,或者使用setFileName()方法进行设置。

使用 QPluginLoader 类一旦加载成功,插件会保留在内存中,直到所有 QPluginLoader 实例都被卸载,或者直到应用程序终止。可以使用多个unload()卸载插件,但如果其它 QPluginLoader 实例仍在使用相同的库,则调用将失败,卸载仅在所有实例都调用了unload()后才会发生。在卸载之前,根组件也将被删除。

注意:
请注意,如果您的应用程序是静态链接 Qt 的,则不能使用 QPluginLoader。在这种情况下,您还需要静态链接插件。如果需要在静态链接的应用程序中加载动态库,可以使用 QLibrary

二、常用方法

2.1 构造函数

原型:

QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = Q_NULLPTR)

解释:
使用给定的父级构造一个插件加载器,该加载器将加载fileName指定的插件。

为了可加载,文件的后缀必须是符合平台的可加载库的有效后缀,例如Unix上的.so,macOS和iOS上的.dylib,以及Windows上的.dll。后缀可以通过QLibrary::isLibrary()进行验证。

注:parent是可选的。

2.2 动态加载方法——load()

原型:

bool QPluginLoader::load()

解释:
作用:动态加载插件。
如果插件加载成功,则返回true,否则返回false。由于instance()总是在解析任何符号之前调用此函数,因此没有必要显示地调用它。在某些情况下,我们可能希望提前加载插件,此时则可以使用该方法。

2.3 检查是否加载成功——isLoaded()

原型:

bool QPluginLoader::isLoaded() const

解释:

如果插件已加载,则返回true,否则返回false

2.4 访问插件中的根组件——instance()

原型:

QObject *QPluginLoader::instance()

解释:

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

如果根组件被销毁,调用此函数将创建一个新实例。
QPluginLoader被销毁时,此函数返回的根组件不会被删除。如果你想确保根组件被删除,你应该在不需要再访问核心组件是调用unload()。当库最终卸载时,根组件将自动删除。

组件对象时QObject。使用qobject_cast()访问你感兴趣的接口。

2.5 卸载插件——unload()

原型:

bool QPluginLoader::load()

解释:

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

在应用程序终止时,会自动卸载插件,因此通常不需要调用此函数。

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

注: 不要手动删除根组件对象,而是依赖于unload()方法来自动删除它。因为手动删除根组件对象可能会引起内存管理问题,比如访问已删除对象的错误或资源泄露。

错误举例 (手动删除根组件,会导致未定义行为):

#include <QPluginLoader>
#include <QObject>class MyPluginComponent : public QObject {Q_OBJECT
public:MyPluginComponent() {}~MyPluginComponent() {}void doSomething() {}
};int main() {QPluginLoader loader("MyPlugin.dll");QObject *rootComponent = loader.instance();if (rootComponent) {// 错误的手动删除根组件delete rootComponent; // 这里手动删除了根组件对象// 尝试再次使用 rootComponent,会导致未定义行为MyPluginComponent *myComponent = qobject_cast<MyPluginComponent *>(rootComponent);if (myComponent) {myComponent->doSomething(); // 这里会访问已被删除的对象,导致崩溃或未定义行为}}// 即使调用 unload(),根组件已经被手动删除,可能会导致内存错误loader.unload(); // 此时 unload() 不能正确处理已删除的对象return 0;
}
http://www.yayakq.cn/news/609853/

相关文章:

  • 北京网站设计济南兴田德润团队怎么样阿里免费logo生成器
  • 咨询行业网站制作怎么把自己的网站推广
  • 网站发外链的好处广安 网站建设
  • 怎样进行网站推广如何制作漂亮的微信公众号
  • 网站设计岗位的职责与要求效果好的免费网站建设
  • html网站欣赏wordpress自定义登陆
  • 天津企业做网站长沙外贸公司排名
  • 学习网站免费网站空间大小多少合适
  • 东莞专业做网站的公司有哪些公司网站开发后台代码
  • 网站建设外包发展情况全面的手机网站建设
  • 南京网站开发推南京乐识找人开发软件去什么网站
  • 新公司网站建设流程郑州做网站的公司排名
  • 西安 微网站番禺网站设计公司
  • 如何查询网站域名备案wordpress后台太卡
  • 英文网站设计模板网站开发发展趋势2018
  • 公司 网站建设服务器租用价格
  • 做网站卖水果哪里进货嵌入式培训宣传
  • 国内做的好的网站网站建设内容策划
  • 网站建设与管理专业是什么wordpress静态页制作
  • 摄影网站功能设计互联网广告销售是做什么的
  • 山东美建站做百度网站每年的费用多少
  • qq空间做淘宝客网站千万别学建筑工程技术
  • 手机网站模板 导航wordpress 批量修改字体
  • 重庆微信网站建设多少钱网络优化包括
  • 公司手机网站模板网站建设平台一般多少钱
  • 如何选择建设网站类型百度网盘服务电话6988
  • 宝安做网站哪家好广州专业网站建设网页设计服务
  • 长沙网站制作公司哪家好进了网站的后台系统 怎么改公司的网站
  • 广东广州网站建设找公司网站建设
  • 进不去的网站用什么浏览器怎么把网上的视频保存到手机