QT插件简单使用

目录

总的目录结构

1 主程序

2 插件程序

3 运行结果

 4 demo压缩包


总的目录结构

        编译器 mingw 64-bit

QT插件简单使用_第1张图片

 

1 主程序

1 新建一个其他项目的子文件目录后,创建一个普通的 QMainWindow 项目 

主程序中添加头文件  Interface.h 内容如下:

#ifndef INTERFACE_H
#define INTERFACE_H
#include 
#include 
//定义接口
class Interface
{
public:
    virtual ~Interface() {}
    virtual int add(int a,int b) = 0;
};

QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(Interface, "org.qt-project.Qt.QGenericPluginFactoryInterface")
QT_END_NAMESPACE

#endif // INTERFACE_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include "interface.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void LoadPlugin();
    Interface* m_pInterface = nullptr;
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    LoadPlugin();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::LoadPlugin()
{
    QString filename = qApp->applicationDirPath() + "/Plugin.dll";
    qDebug()<<"LoadPlugin filename:"<(plugin);
        if (m_pInterface)
            qDebug()<<"LoadPlugin success! 7 + 8 = "<add(7,8);
        else
            qDebug()<<"qobject_cast fail!";
    }
    else
        qDebug()<<"LoadPlugin fail!";

}

2 插件程序

1 右击主项目 新建子项目项

(也可以新建另一个工程 ) 

选择C++ Library ---->QT Plugin

QT插件简单使用_第2张图片

QT插件简单使用_第3张图片

 

将 Interface.h拷贝到该目录下 与Plugin.pro同级目录

genericplugin.h
#ifndef GENERICPLUGIN_H
#define GENERICPLUGIN_H

#include 
#include "Interface.h"
class GenericPlugin : public QGenericPlugin, public Interface
{
    Q_OBJECT
    Q_INTERFACES(Interface)
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface/1.0" FILE "Plugin.json")

public:
    explicit GenericPlugin(QObject *parent = nullptr);
    int add(int a,int b);
private:
    QObject *create(const QString &name, const QString &spec) override;
};

#endif // GENERICPLUGIN_H
genericplugin.cpp
#include "genericplugin.h"

GenericPlugin::GenericPlugin(QObject *parent)
    : QGenericPlugin(parent)
{
}

int GenericPlugin::add(int a, int b)
{
    return a + b;
}

QObject *GenericPlugin::create(const QString &name, const QString &spec)
{
    //static_assert(false, "You need to implement this function");

    return nullptr;
}

Plugin.json

{
    "Keys" : [ ]
}
3 运行结果

将生成的Plugin.dll 和 libPlugin.a拷贝到 exe 同级目录,运行结果如下:

 4 demo压缩包

https://download.csdn.net/download/weixin_44270564/88059891?spm=1001.2014.3001.5503

你可能感兴趣的:(qt,开发语言)