• 3149阅读
  • 4回复

zhengtianzuo系列-Qt调用插件 [复制链接]

上一主题 下一主题
离线zhengtianzuo
 

只看楼主 倒序阅读 楼主  发表于: 2017-10-10
首先创建一个Qt的一般的动态库
然后创建一个插件接口文件, 如下:

```
#pragma once
#include <QtPlugin>

class CQtMyPluginInterface
{
public:
    virtual ~CQtMyPluginInterface() {}
    virtual QString getString() = 0;
};

Q_DECLARE_INTERFACE(CQtMyPluginInterface, "cn.camelsoft.CQtMyPluginInterface/1.0")
```

1. ` #include <QtPlugin>` //引用Qt插件系统头文件
2. `Q_DECLARE_INTERFACE(CQtMyPluginInterface, "cn.camelsoft.CQtMyPluginInterface/1.0")` //申明接口

然后改造库类的头文件, 如下:

```
#pragma once
#include <QObject>
#include "QtMyPluginInterface.h"

class CQtMyPlugin : public QObject, public CQtMyPluginInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA ( IID "cn.camelsoft.CQtMyPluginInterface/1.0")

    Q_INTERFACES(CQtMyPluginInterface)
  
public:
    virtual QString getString();
};
```

1. `Q_PLUGIN_METADATA ( IID "cn.camelsoft.CQtMyPluginInterface/1.0")` //注册插件ID
2. `Q_INTERFACES(CQtMyPluginInterface)` //申明插件接口

这样一个Qt插件框架下开发的插件就做好了. 接下来是调用

```
    QPluginLoader loader("QtMyPlugin.dll");
    if (!loader.load())
    {
        return;
    }
    CQtMyPluginInterface *plugin = qobject_cast<CQtMyPluginInterface *>(loader.instance());
    if (plugin)
    {
        QMessageBox::about(NULL, QStringLiteral("显示插件信息"), plugin->getString());
    }
```


  
需要完整代码请访问 QtWidgetsExamples

博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线ccazqyy

只看该作者 1楼 发表于: 2017-10-11
          
离线liuchangyin

只看该作者 2楼 发表于: 2017-10-11
离线stlcours

只看该作者 3楼 发表于: 2017-10-16
潜水员出来 顶贴 。内容不错
离线big_mouse

只看该作者 4楼 发表于: 2020-04-22
快速回复
限100 字节
 
上一个 下一个