窗口插件和前面的创建方式是一样的,就是将继承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);
}
}
点击按钮插件窗口就会弹出来了