Qt - Plugin

qt 的插件

什么是插件

插件是一种遵循一定规范的应用程序接口编写出来的程序,定位于开发实现应用软件平台不具备的功能的程序。

2个特点:

1、基于接口编程

2、提供扩展性

qt插件的2种形式

可以有2种插件形式

1、动态插件,也就是动态库

2、静态插件

插件是一个动态库,可以在运行时加载该库以扩展应用程序。Qt使得创建自定义插件并使用QPluginLoader加载它们成为可能。为了确保插件不会丢失,还可以将它们静态链接到可执行文件

示例可以查看Qt的demo: Plug & Paint Example | Qt Widgets 5.15.6

plugin实现

对于插件工程来说,需要实现一个接口:

  1. 定义一个继承 QObject 和 接口的插件;
  2. 使用 Q_INTERFACES() 声明使用的接口类型;在moc中支持按照对应的接口转换。
  3. 使用 Q_PLUGIN_METADATA() 宏导出元信息;在moc中导出元数据和类。
class ExtraFiltersPlugin : public QObject, public FilterInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PlugAndPaint.FilterInterface" FILE "extrafilters.json")
    Q_INTERFACES(FilterInterface)

public:
    QStringList filters() const override;
    QImage filterImage(const QString &filter, const QImage &image,
                       QWidget *parent) override;
};

主程序实现

对于主工程来说,需要定一个插件的接口:

动态:

  1. 使用 Q_DECLARE_INTERFACE() 是生成对应接口转换函数 qobject_cast ;Q_INTERFACES 也会用到。
  2. 使用 QPluginLoader 来加载插件;
  3. 使用 qobject_cast() 进行插件造型,判断插件实现了哪个接口;

静态:

    1、Q_IMPORT_PLUGIN(BasicToolsPlugin),导入类

    2、QPluginLoader::staticInstances() 加载静态插件


                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值