qt 定义插件
阅读原文时间:2023年07月13日阅读:3

定义的接口
----------------------------------------------
#ifndef REGEXPINTERFACE_H

#define REGEXPINTERFACE_H

#include

class RegExpInterface

{

public:

virtual ~RegExpInterface()

{

}

virtual QString regexp(const QString &message)=0;

};

Q_DECLARE_INTERFACE(RegExpInterface, "org.myplugin.RegExpInterface")

#endif // REGEXPINTERFACE_H

实现的接口的类 头文件
---------------------------------------------

#define REGEXPPLUGIN_H

#include

#include

#include "regexpinterface.h"

class RegExpPlugin : public QObject, RegExpInterface

{

Q\_OBJECT

Q\_PLUGIN\_METADATA (IID "org.myplugin.RegExpInterface")

Q\_INTERFACES(RegExpInterface)

public:

QString regexp(const QString &message);

};

#endif // REGEXPPLUGIN_H

源文件
-------------------------------------

#include "regexpplugin.h"

QString RegExpPlugin::regexp(const QString &message)

{

return "hello world";

}

pro 文件
-------------------------------------

HEADERS += \

regexpplugin.h \\

regexpinterface.h

SOURCES += \

regexpplugin.cpp

TEMPLATE=lib

CONFIG +=plugin

TARGET =regexpplugin

测试插件的窗口

窗口的头文件
-----------------------------------------

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include "regexpinterface.h"

#include

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q\_OBJECT

public:

explicit MainWindow(QWidget \*parent = 0);

~MainWindow();

private slots:

void on\_pushButton\_clicked();

private:

RegExpInterface \*regInterface;

Ui::MainWindow \*ui;

bool loadPlugin();

};

#endif // MAINWINDOW_H

窗口的源文件
----------------------------------------

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}

bool MainWindow::loadPlugin()

{

  QPluginLoader loader("../plug/plugin.dll");

    QObject \*obj= loader.instance();

    if(obj)

    {

        regInterface=qobject\_cast<RegExpInterface \*>(obj);

        if(regInterface)

        {

           QString str= regInterface->regexp("jjjkk");

           ui->Result->setText(str);

        }

    }

}

void MainWindow::on_pushButton_clicked()

{

this->loadPlugin();

}

插件中常用的pri文件
------------------------------------------------

HEADERS += \

$$PWD/common/HpQRCodeInterface.h

PROJECT_COMPONENTSOURCE = $$PWD/common

PLUGIN_INSTALL_DIRS = $$[QT_INSTALL_LIBS]/ukui-demo-plugin

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章