qt插件元数据不包含一个有效的元数据_制作Qt应用程序的插件(使用QtPlugin),对比DLL它是全平台通用的...

本文介绍了如何在Qt环境中创建和使用自定义插件。首先定义了一个纯虚类`IMyPlugin`作为插件接口,并通过`Q_DECLARE_INTERFACE`宏声明。然后实现了一个名为`MyPlugin`的插件类,继承自`QObject`和`IMyPlugin`,并提供了`Hello`方法。使用`Q_PLUGIN_METADATA`宏描述了插件元数据。在测试部分,通过`QPluginLoader`加载插件,并调用了插件的方法。这为开发者提供了一种扩展应用程序功能的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能。另一种是用于扩展开发者的应用。本文要讲的是后者。

定义一个纯虚类作为插件接口

#include 

#include 

class IMyPlugin

{

public:

virtual QString Hello() = 0;

};

Q_DECLARE_INTERFACE(IMyPlugin, "com.apple.im.plugin.IMyPlugin")

最后一行的Q_DECLARE_INTERFACE宏告诉Qt这个纯虚类是一个插件接口。

第一个参数是接口类名,第二个参数是插件标识符,标识符是大小写敏感的且必须是唯一的。

接着就是接口的具体实现了

class MyPlugin : public QObject, public IMyPlugin

{

Q_OBJEC

Q_PLUGIN_METADATA(IID "com.google.myplugin" FILE "C:/a.json")

Q_INTERFACES(IMyPlugin)

public:

virtual QString Hello() Q_DECL_OVERRIDE;

};

实现类必须继承自QObject和插件接口类。Q_PLUGIN_METADATA宏用于描述插件元数据,第一个参数IID是必须的,同插件标识一样

而第二个参数FILE是可选的,指定一个本地json文件,该文件中可以描述插件的相关数据信息

(上面代码中指向的a.json内容为{"name":"jack", "age":18},稍后可以看到)

测试方法的实现没啥好说了,只是返回一个字符串

QString MyPlugin::Hello()

{

return "Hello";

}

调用的话也比较简单,就是通过QPluginLoader类

{

QPluginLoader loader("C:/MyPlugin.dll");

if (loader.load())

{

QObject *obj = loader.instance();

if (obj)

{

IMyPlugin *plugin = qobject_cast(obj);

if (plugin)

{

// 测试插件方法

qDebug() <Hello();

// 输出插件元数据

qDebug() <

}

// 需要手动释放

delete obj;

}

}

}

最后运行结果如图

http://blog.csdn.net/aqtata/article/details/38986271

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值