第一步
首先,新建一个工程,并实现一个插件接口类,如下图中的objectfactoryinstance文件,用于:
- 注册相关类(使该类可以支持反射),用于插件外面便捷的调用;
- 将某些对象加入到该类对象管理对象里(如,UIService对象)。
//objectfactoryinstance.h
#include "def.h"
#include "objectfactory.h"
class PLUGIN ObjectFactoryInstance : public QObject, public ObjectFactory
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "IASystem.ObjectFactoryInstance.CatalogPlugin")
Q_INTERFACES(ObjectFactory)
public:
ObjectFactoryInstance(){};
~ObjectFactoryInstance(){};
void init() Q_DECL_OVERRIDE;
void install() Q_DECL_OVERRIDE;
private:
};
//objectfactoryinstance.cpp
#include "objectfactoryinstance.h"
#include "gui.h"
#include "browser/qgsbrowserdockwidget.h"
#include "browser/browsercommand.hpp"
#include "browser/showbrowsercommand.hpp"
void ObjectFactoryInstance::init()
{
this->registerClass<BrowserCommand>();
this->registerClass<ShowBrowserCommand>();
}
void ObjectFactoryInstance::install()
{
QMainWindow* pMainWindow = MAINWINDOW;
// add by zz
QgsBrowserDockWidget* pBrowser = new QgsBrowserDockWidget("browser",pMainWindow);
pMainWindow->addDockWidget(Qt::RightDockWidgetArea, pBrowser);
IA_SERVICE(UIService)->registerControl(pBrowser, pMainWindow);
}
第二步
实现第一步中注册了的类,例如:BrowserCommand、ShowBrowserCommand等外部接口类,以及QgsBrowserDockWidget等对象类。
第三步
写插件配置文件,在Bin\Win64\plugin目录下,创建插件目录,加入相应dll文件,并写好配置文件(文件名与目录名相同)。如果注册的类为toolbox项或者菜单项,则在basePlugin.plugin中配置其ui位置。
<!-- IA.Catalog.plugin -->
<?xml version="1.0" encoding="utf-8" ?>
<PluginFile Name="IASystem.Catalog"
Author="Zhang Min"
Version="1.0"
Description="Catalog Plugin.">
<Manifest>
<!--the depency node. for example:
<Dependency PluginFile="IASystem.GP" Version="1.0" requirePreload="true"/>-->
</Manifest>
<Runtime Assembly="IA.CatalogPlugin.dll"/>
<Resources>
<String Language="zh_cn" File="Language/zh_cn/ia.catalogplugin_zh.qm"></String>
<String Language="en" File="Language/en/ia.catalogplugin_en.qm"></String>
<Icon File="resource/catalogplugin.res"></Icon>
</Resources>
<!--Initialize some plugin node Path-->
</PluginFile>
第四步
通过软件的插件管理器来安装插件,安装成功后可以选择卸载插件(但注意,被卸载的插件不能够被其他插件所依赖)。