QT插件开发加载一个窗口插件

2022-08-13 13:17:15

窗口插件和前面的创建方式是一样的,就是将继承QObject改成继承QWidget

同时继承插件接口和QWidget,则此类的对象既是一个窗口也是一个插件

#ifndef PLUGIN_WIDGET_H
#define PLUGIN_WIDGET_H

#include "plugin_widget_global.h"
#include "PluginInterface.h"
#include <QWidget>
#include <QDebug>

class PLUGIN_WIDGETSHARED_EXPORT Plugin_widget : public QWidget,public PluginInterface
{
    Q_OBJECT
    Q_INTERFACES(PluginInterface)
    Q_PLUGIN_METADATA(IID "Plugin_widget")

public:
    Plugin_widget();
    QString get_name() const
    {
        return "Plugin_widget";
    }
    QString show_text() const
    {
        return "this is Plugin_widget";
    }
    virtual void recMsgfromManager(PluginMetaData metaData) Q_DECL_OVERRIDE
    {
        qDebug()<<"插件Plugin_widget接收到消息:"<< metaData.msg;
        if(metaData.msg == "show")
            this->show();
    }

signals:
    void sendMsg2Manager(PluginMetaData) Q_DECL_OVERRIDE;
};

#endif // PLUGIN_WIDGET_H

这里当插件收到内容为“show”的消息时,显示窗口

改一下调用界面

显示插件窗口的代码:

void Widget::on_pushButton_20_clicked()
{
    PluginManager * pm = PluginManager::instance();
    auto loader = pm->getPlugin("Plugin_widget");
    if(loader)
    {
        PluginInterface *plugin = qobject_cast<PluginInterface *>(loader->instance());
        PluginMetaData m;
        m.dest = "Plugin_widget";
        m.from = "";
        m.msg = "show";
        emit plugin->sendMsg2Manager(m);
    }
}

点击按钮插件窗口就会弹出来了

  • 作者:友善啊,朋友
  • 原文链接:https://blog.csdn.net/kenfan1647/article/details/107495519
    更新时间:2022-08-13 13:17:15