qt实现最简单的插件

内容分享2周前发布
0 0 0
MyPlugin.h头文件
#ifndef MYPLUGIN_H
#define MYPLUGIN_H
#include <QObject>
  class MyPlugin : public QObject
{
      Q_OBJECT
        Q_PLUGIN_METADATA(IID "com.example.MyPlugin" FILE "MyPlugin.json")
public:
    explicit MyPlugin(QObject *parent = nullptr);
    Q_INVOKABLE void doSomething();
private:
};
  #endif // MYPLUGIN_H

MyPlugin.cpp内容
#include "myplugin.h"
#include <QDebug>
MyPlugin::MyPlugin(QObject *parent)
    : QObject(parent)
{
}

void MyPlugin::doSomething()
{
qDebug()<<"MyPlugin::doSomething";
}

pro文件如下

QT += gui core
TEMPLATE = lib
CONFIG += plugin
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += 
     myplugin.cpp
HEADERS += 
      myplugin.h
DISTFILES += MyPlugin.json
# Default rules for deployment.
!isEmpty(target.path): INSTALLS += target

 QPluginLoader loader("E:/workspace_qt/future/MyPlugin.dll"); //替换为实际路径
    QObject *plugin = loader.instance();
    if (plugin) {
    const QMetaObject *metaObject = plugin->metaObject();
    // 获取插件的元数据信息
    qDebug()<<metaObject->className();
    qDebug()<<"methodcount="<<metaObject->methodCount();

    for(int i=0;i < metaObject->methodCount();++i)
    {
        QMetaMethod curMethod = metaObject->method(i);
        qDebug()<<curMethod.name();
    }
    metaObject->invokeMethod(plugin,"doSomething");
    }
    else
    {
        qDebug()<<"fail load MyPlugin";
    }
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...