Qt封装动态库

QLibrary可以加载动态库,也可以使用QPluginLoder加载动态库,本文主要介绍QPluginLoder的实现:
1、创建动态库项目
在这里插入图片描述
2、选择Qt Plugin选项
在这里插入图片描述
3.定义接口类

#ifndef ITEST_H
#define ITEST_H
#include <QObject>
#include <QJsonObject>
#define ITest_iid"org.rzt.ITest/1.0"
class ITest:public QObject
{
    Q_OBJECT
public:
    virtual ~ITest(){}
    virtual void testData() = 0;
};
Q_DECLARE_INTERFACE(ITest, ITest_iid)
#endif // ITEST_H

4、具体实现类

#ifndef TEST_H
#define TEST_H
#include "ITest.h"
class Q_DECL_EXPORT Test: public ITest
{
    Q_OBJECT
    Q_INTERFACES(ITest)
    Q_PLUGIN_METADATA(IID ITest_iid)
public:
    Test();
    virtual ~Test() override;
    virtual void testData()override { };
};
#endif // TEST_H

5、模板方式调用

//定义模板加载
template<typename T>
static T* loadOnePlugin(const QString& strPuginPath)
{
    QPluginLoader pluginLoader(strPuginPath);
    QObject *plugin = pluginLoader.instance();
    T* t = qobject_cast<T*>(plugin);
    if (t == Q_NULLPTR)
    {
      qDebug() << pluginLoader.errorString();
    }
  return t;
}
//具体使用方法
ITest  *pTest = loadOnePlugin<ITest>(./ITest.dll”);

相关宏解释:
Q_DECLARE_INTERFACE:Q_DECLARE_INTERFACE 是一个定义了使 qobject_cast<T*>()返回指针的帮助函数的一个宏
Q_DECL_EXPORT :用于导出类
Q_INTERFACES:元对象系统 moc 运行代码时将检查放于 Q_INTERFACES 的接口的名字是否确实被声明。
Q_PLUGIN_METADATA:用于描述插件元数据

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值