QT6插件
生成 myplugin.h和myplugin.cpp,手动添加 myPluginInterface.h 接口文件。
CMakeLists.txt文件中
add_library(myPlugin SHARED
myPlugin_global.h
myplugin.cpp
myplugin.h
myPluginInterface.h //手动添加
)
myPluginInterface.h文件内容为:
#ifndef MYPLUGININTERFACE_H
#define MYPLUGININTERFACE_H
#include
#define PluginInterface_iid "wangabc"
class myPluginInterface
{
public:
virtual ~myPluginInterface() {}
virtual QString name() const =0;
};
Q_DECLARE_INTERFACE(myPluginInterface,PluginInterface_iid);
#endif // MYPLUGININTERFACE_H
myplugin.h文件内容为:
#ifndef MYPLUGIN_H
#define MYPLUGIN_H
#include "myPlugin_global.h"
#include
#include "myPluginInterface.h"
class MYPLUGIN_EXPORT myPlugin:public QObject,public myPluginInterface
{
Q_OBJECT;
Q_INTERFACES(myPluginInterface);
Q_PLUGIN_METADATA(IID "my_plugin");
public:
myPlugin();
QString name() const
{
return "Hello World";
}
};
#endif // MYPLUGIN_H
编译生成libmyPlugin.dll文件。
重建工程写一个简单验证程序
mainwindow.cpp主要文件内容:
#include "mainwindow.h"
#include "myPluginInterface.h" //myPluginInterface.h文件放到主程序所在目录
#include
#include
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QPluginLoader pluginLoader("libmyPlugin.dll"); //libmyPlugin.dll文件放到生成exe文件所在目录
if(pluginLoader.load())
{
qDebug("load suc");
QObject *p=pluginLoader.instance();
if (p)
{
qDebug("p suc");
myPluginInterface *m = qobject_cast
qDebug() << m->name();
}
}
}
程序运行结果:
标签:
相关文章
-
无相关信息