QT之插件Plugin生成与使用

原文地址::https://blog.csdn.net/ly305750665/article/details/78680647?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

相关文章

1、QT如何创建和使用Qt Plugins (插件)----https://blog.csdn.net/vample/article/details/78860005

2、Qt插件创建及加载----https://baijiahao.baidu.com/s?id=1652356608638861677&wfr=spider&for=pc

3、在项目中创建并使用自定义Qt插件【VS+Qt项目开发系列】(六)----https://blog.csdn.net/lhl1124281072/article/details/80039223

 

QT之插件Plugin生成与使用
QT之插件Plugin生成与使用
简述
插件生成
效果图
结尾
简述
有时候,我们在做一个应用程序的时候,并不希望我们生成的软件仅仅是一个EXE文件,而是拆分成各个模块,越细越好。在未来更新发布中,都是非常的便利,我们更新的只是其中某一小部分,而不是整个应用程序。(说到这里,我们看代码吧)

插件生成
//我们先定义一个接口头文件plugindemoplugin.h
QT_BEGIN_NAMESPACE
class QtPluginDemoInterface
{
public:
    virtual ~QtPluginDemoInterface() {}
    //接口中声明一个打印函数
    virtual void printMessage(const QString& message) = 0;
};

#define QDesignerCustomWidgetInterface_iid "org.qt-project.QtPluginDemoInterface"
Q_DECLARE_INTERFACE(QtPluginDemoInterface, QDesignerCustomWidgetInterface_iid)

QT_END_NAMESPACE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//派生类头文件plugindemo.h
#include "plugindemoplugin.h"

class pluginDemo : public QObject, QtPluginDemoInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtPluginDemoInterface" FILE "plugindemoplugin.json")
    Q_INTERFACES(QtPluginDemoInterface)

public:
    void printMessage(const QString& message) override;
};
1
2
3
4
5
6
7
8
9
10
11
12
//plugindemo.cpp
//在定义一个派生类去实现我们基类中的接口,编译生成库文件
void pluginDemo::printMessage(const QString& message)
{
    //在派生类中实现打印函数
    qDebug() << "---------------This is QtPluginDemoInterface Demo Test--------------" << message;
}
1
2
3
4
5
6
7
接下来,我们在我们的UI主程序中加载此插件

//plugintest.h
#include <QtWidgets/QMainWindow>
#include "ui_plugintest.h"

class QtPluginDemoInterface;
class PluginTest : public QMainWindow
{
    Q_OBJECT

public:
    PluginTest(QWidget *parent = 0);

private:
    Ui::PluginTestClass ui;
    QtPluginDemoInterface * m_echoInterface;
    bool loadPlugin();
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//plugintest.cpp
PluginTest::PluginTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    loadPlugin();
    connect(ui.pushButton, &QPushButton::clicked, [this](){
        m_echoInterface->printMessage("123456789");
    });
}

bool PluginTest::loadPlugin()
{
    QDir pluginsDir(qApp->applicationDirPath());
    //这里我新建了plugins文件夹,把上面生成的dll文件放到此文件夹下
    pluginsDir.cd("plugins");
    //加载当前文件夹下的库文件
    foreach(QString fileName, pluginsDir.entryList(QDir::Files)) {
        QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
        QObject *plugin = pluginLoader.instance();
        if (plugin) {
            m_echoInterface = qobject_cast<QtPluginDemoInterface *>(plugin);
            if (m_echoInterface)
                return true;
        }
    }

    return false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
效果图


结尾
————————————————
版权声明:本文为CSDN博主「雨田哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ly305750665/article/details/78680647

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成 Qt 插件的 JSON 文件需要按照以下步骤进行操作: 1. 创建一个 JSON 文件,文件名必须与插件库文件名相同,例如:`myplugin.json`。 2. 在 JSON 文件中添加以下字段: - `name`:插件的名称。 - `version`:插件的版本号。 - `description`:插件的描述信息。 - `type`:插件的类型,通常为 `qt.plugin`。 - `platforms`:插件支持的平台,可以是 `windows`, `macos` 或 `linux` 等。 - `dependencies`:插件所依赖的其他插件,可以有多个依赖项。 示例: ```json { "name": "MyPlugin", "version": "1.0", "description": "This is my plugin", "type": "qt.plugin", "platforms": ["windows", "macos", "linux"], "dependencies": [] } ``` 3. 将 JSON 文件放置在插件库的根目录下。 4. 在插件库项目文件中添加以下代码: ```qmake TARGET = MyPlugin TEMPLATE = lib CONFIG += plugin # 将插件的头文件目录添加到 INCLUDEPATH 中 INCLUDEPATH += $$PWD # 将插件的源文件添加到 SOURCES 中 SOURCES += myplugin.cpp # 将插件的 JSON 文件添加到 INSTALLS 中 json.files = myplugin.json INSTALLS += json ``` 5. 构建插件库,JSON 文件会自动安装到正确的位置。 注意事项: - JSON 文件中的字段必须按照指定的格式添加,否则插件可能无法被正确加载。 - 插件库项目文件中的 `CONFIG` 必须包含 `plugin`,否则编译器无法将库文件识别为插件。 - 插件的头文件和源文件必须在项目文件中正确地指定,否则编译器无法找到它们。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值