QGIS 开发之旅二《构建插件工程》

上一篇文章写了二次开发环境的构建,这一章我们从零开始构建插件工程,并理解下QIGIS 如何识别插件程序的。

1、创建QGIS 工程

新建项目,选择下面的空工程

工程创建成功后,是下面的样子,没有任何文件

2、配置QGIS工程

因为创建的是空程序,改下配置类型,改成动态库和QGIS的调用命令

QGIS的调用命令改成其所在目录。

引用头文件和链接库。主要配置OSGwo4w下面的目录

C++ 常规 附加包含目录

C++ 连接器 附加库目录

连接器->输入

添加一些静态文件,用于后面插件的图片,新建resource,导入一些图片

3、创建类

我可以随便找个QGIS的插件源码,或者读QIS源码去理解插件原理。

创建类,基类可以先不选,后面在添加。

Point .h 改成如下:

#pragma once
#include <QtMath>
#include <QObject>
#include <qgisplugin.h>
#include <qgisinterface.h>

class Point:public QObject, public QgisPlugin  //这里是必须继承的两个QGIS的类
{
	Q_OBJECT
public:
    Point(QgisInterface* interface,
        QString const& name = "",
        QString const& description = "",
        QString const& category = "",
        QString const& version = "",
        PluginType type = MapLayer);

    virtual ~Point();
public:
    void initGui() override; //Qigs 开始加载的时候会首先调用这个类
    void unload() override;
public slots:
    void initFinished();
private:
    QgisInterface* interface { nullptr };
    QAction* action{ nullptr };
};

Point.cpp 改成如下:

#include "Point.h"

#include <QAction>
#include <QToolBar>
#include <QVector>
#include <qmessagebox.h>
#include "qgsmessagebar.h"


Point::Point(QgisInterface* interface,
    QString const& name,
    QString const& description,
    QString const& category,
    QString const& version,
    PluginType type)
    :QgisPlugin(name, description, category, version, type)
    , interface(interface)
{
    connect(interface, SIGNAL(initializationCompleted()), this, SLOT(initFinished()));
}

Point::~Point()
{
}

void Point::initFinished()
{
    //QMessageBox::information(nullptr, "Title", "Hello world");
}

void Point::initGui()
{
    QMessageBox::information(nullptr, "Title", "Hello world");
}


void Point::unload()
{
    if (action) {
        delete action;
    }
}

用QGIS 扩展创建插件,创建pluginfactory.cpp。源码如下

#include <QtMath>
#include<QString>
#include<qgisinterface.h>
#include <qgisplugin.h>
#include "point.h"

static  QString sName = "SVGIS Editor";
static  QString sDescription = "SVGIS Editor";
static  QString sCategory = "Layers";
static  QString sPluginVersion = "Version 1.0";
static  int sPluginType = QgisPlugin::UI;
static  QString sPluginIcon = ":/Images/earth.png";

//插件创建
QGISEXTERN QgisPlugin* classFactory(QgisInterface* theQgisInterfacePointer)
{
    return new Point(theQgisInterfacePointer, sName, sDescription, sCategory, sPluginVersion, QgisPlugin::UI);
}

QGISEXTERN QString* name()
{
    return &sName;
}


QGISEXTERN QString* description()
{
    return &sDescription;
}

QGISEXTERN QString* category()
{
    return &sCategory;
}

QGISEXTERN int type()
{
    return sPluginType;
}

QGISEXTERN QString* version()
{
    return &sPluginVersion;
}

QGISEXTERN QString* icon()
{
    return &sPluginIcon;
}

QGISEXTERN void unload(QgisPlugin* thePluginPointer)
{
    delete thePluginPointer;
}

编译运行。启动Qgis 后选择 Plugins ,选择我们插件,弹出信息框。

4、总结

        本文通过新建插件工程构建QGIS 插件类,只要按照QGIS的继承关系写好类并放在QGIS 的插件目录下面。QGIS 会自动去读取插件。具体的实现逻辑会在源码解读中介绍。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangiser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值