欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > qt 插件的创建与加载

qt 插件的创建与加载

2025/2/21 3:02:47 来源:https://blog.csdn.net/ckg3824278/article/details/142560038  浏览:    关键词:qt 插件的创建与加载

1、创建插件项目

在Qt Creator中,选择 “File” -> “New File or Project” -> “Library” -> “Qt Library” -> “Choose...”,然后按照向导完成项目 MyPlugin 创建。

2、定义插件接口

定义一个插件接口类,所有插件都需要实现这个接口:

#ifndef PLUGININTERFACE_H
#define PLUGININTERFACE_H#include <QObject>class PluginInterface {
public:virtual ~PluginInterface() {}virtual void doSomething() = 0;
};#define PluginInterface_iid "com.example.PluginInterface"
Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid)#endif // PLUGININTERFACE_H

3、实现插件

在插件项目中,实现插件接口:

myplugin.h

#ifndef MYPLUGIN_H
#define MYPLUGIN_H#include <QObject>
#include "plugininterface.h"class MyPlugin : public QObject, public PluginInterface {Q_OBJECTQ_PLUGIN_METADATA(IID PluginInterface_iid)Q_INTERFACES(PluginInterface)public:void doSomething() override;
};#endif // MYPLUGIN_H

myplugin.cpp

#include "myplugin.h"
#include <QDebug>void MyPlugin::doSomething() {qDebug() << "MyPlugin is doing something!";
}

myplugin.pro

QT += coreTEMPLATE = lib
CONFIG += pluginTARGET = myplugin
HEADERS += myplugin.h
SOURCES += myplugin.cpp

4、加载和使用插件

4.1 创建主项目

在Qt Creator中,选择“File” -> “New File or Project” -> “Application” -> “Qt Widgets Application” -> “Choose...”,然后按照向导完成项目创建。

4.2 加载插件

在主项目中,使用QPluginLoader加载和使用插件:

#include "mainwindow.h"#include <QApplication>
#include <QDebug>
#include <QPluginLoader>
#include "plugininterface.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);QPluginLoader loader("myplugin");QObject *plugin = loader.instance();if (plugin) {PluginInterface *interface = qobject_cast<PluginInterface *>(plugin);if (interface) {interface->doSomething();} else {qDebug() << "Failed to cast plugin to PluginInterface.";}} else {qDebug() << "Failed to load plugin:" << loader.errorString();}MainWindow w;w.show();return a.exec();
}

main.pro:

HEADERS += plugininterface.h# 添加插件库路径
LIBS += -L$$OUT_PWD/../myplugin -lmyplugin# 添加插件接口头文件路径
INCLUDEPATH += $$PWD/../myplugin

5、动态查找插件路径

QDir pluginsDir(qApp->applicationDirPath());
pluginsDir.cd("plugins");foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));QObject *plugin = loader.instance();if (plugin) {PluginInterface *interface = qobject_cast<PluginInterface *>(plugin);if (interface) {interface->doSomething();} else {qDebug() << "Failed to cast plugin to PluginInterface.";}} else {qDebug() << "Failed to load plugin:" << loader.errorString();}
}

qq群交流:698593923

觉得有帮助的话,打赏一下呗。。

           

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词