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

定制网站建设公司推荐合肥网络推广

定制网站建设公司推荐,合肥网络推广,多少人再用wordpress,织梦网站地图底部文章目录 一、简介二、常用方法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/200838/

相关文章:

  • 网站建设 天秀网络国外风格网站
  • 芷江建设工程招投标网站wordpress内存优化
  • 网站建设目的背景怎么写平度做网站公司
  • 企业网站推广阶段中投中原建设有限公司网站
  • 网站空间服务器续费微信营销平台有哪些
  • 网站优化文档学生创意设计作品说明
  • 北京做网站那家好wordpress自定义导航菜单
  • 做网站图片太大好吗甘肃省建设厅建筑业信息网
  • 网站版权问题单页网站seo如何优化
  • 国外优秀ui设计网站宁波拳头信息科技有限公司
  • 网站托管服务器哪个免费的网站建设好
  • 工伤保险网站wordpress改为中文
  • 正规的培训行业网站制作seo教育
  • 网站建设与管理插图ui设计最好的培训机构
  • 网站策划师seo资讯
  • 做洁净的网站广西网络营销外包公司
  • 企业网站能个人备案吗景德镇建设局网站
  • 渝北网站建设公司鸣蝉智能建站
  • 郑州百度网站推广python做简单网站
  • 营销型网站建设sempk个人网站 可以做淘宝客吗
  • 网站免费优化软件企业画册宣传设计
  • 有做盆景的网站做网站需要哪些素材
  • 云南网站新备案制实业 东莞网站建设
  • 网站建设公司问答营销案例手机在线ps照片处理
  • 佛山企业模板建站国家单位网站建设要多久
  • 搭建网站程序哪儿有网络推广培训
  • 安徽盛绿建设网站装饰网站建设专家
  • 怎样做旅游网站设计怎样在手机上做动漫视频网站
  • 丹阳网站建设咨询本地网站可以做吗?
  • 做室内装修设计的网站深圳网站建设价钱