Qt-Plugin

目录

闲谈

一步一步

回首


闲谈

插件经常听说,但是关于制造一个插件,如何制造,如何使用便是要解决的。但是,在这之前,就为什么使用插件说说我的见解。说实话,自己还百科下,大致理解解耦等意思,代价是,没事找事(因为功能完全可以实现,而且,可选的路子也挺多),回报是,新的事务。当然这样的理解着实搞笑,权当在此记录相关。

一步一步

  • 插件接口的定义:其实就是一个抽象对象,Q_DECLARE_INTERFACE(className, strID)
// 测试工程的插件接口
class CusInterFace
{
public:
    virtual ~CusInterFace(){}
    virtual void sayHello(QString info) = 0 ;
};

#define CusInterFace_iid "My.Examples.Plugin.CusInterFace"
Q_DECLARE_INTERFACE(CusInterFace, CusInterFace_iid)
  • 插件的实现:具体对象的实现,而且继承QObject优先;Q_INTERFACES(abstractClass);Q_PLUGIN_METADATA(IID strID FILE);pro文件配置:TEMPLATE = lib ,CONFIG += plugin
// 插件工程,目标是库
class PlugDetail:public QObject,public CusInterFace
{
    Q_OBJECT
    Q_INTERFACES(CusInterFace)
    Q_PLUGIN_METADATA(IID CusInterFace_iid)

public:
    PlugDetail();
    ~PlugDetail();

    void sayHello(QString info);
};
 // pro file
TEMPLATE        = lib
CONFIG         += plugin
  • 插件的使用:
    QString pluginsDir = "..../插件工程.dll";
    QPluginLoader pluginLoader(pluginsDir);

    QObject *plugin = pluginLoader.instance();
    if (plugin)
    {
        //插件名称
        QString pluginName = plugin->metaObject()->className();
        //对插件初始化
        if(pluginName == "PlugDetail") // 具体插件
        {
            m_pInterFace = qobject_cast<CusInterFace *>(plugin);
            if (m_pInterFace)
            {
                  m_pInterFace->sayHello("i get !!!! ");     
            }
            
        }
    }

回首

以上的,接口是我们自定义的,当然Qt为我们提供了诸多便利的接口层,eg:QDesignerCustomWidgetInterface,这样我们只用在完成后两步即可;还有一些高级api。其中,涉及的这三个宏和QPluginLoader 尤为重要了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值