关于C++插件的开发材料较少,根据网上的指导,我采用了早期版本的插件模板生成的方法来创建QGIS的插件,其方法是从以前版本(2.18.25)里面拷贝插件模板的方法进行,具体的执行步骤为

1、拷贝文件

将以前源码src/plugins下面的plugin_builder.py文件 和 plugin_template 文件夹内容拷贝到新的版本(3.16.6)源码里面,。

2、修改文件

1)plugin_builder.py

主要是修改语法错误,因为新的代码需要适应python3的语法,主要修改两个问题

① print "string" 修改为 print("string")

② raw_input()  修改为  input()

2)plugin.cpp 中

static const QgisPlugin::PLUGINTYPE sPluginType = QgisPlugin::UI;

替换为

static const QgisPlugin::PluginType sPluginType = QgisPlugin::UI;

3) CMakeLists.txt

将其中的 QT4_WARP_UI ,QT4_WARP_CPP, QT4_ADD_RESOURCES 修改为 QT5_WARP_UI ,QT5_WARP_CPP, QT5_ADD_RESOURCES

3、终端执行命令python plugin_builder.py,生成自己的插件文件夹

输入插件相关的关键参数就完成该步骤,查看python文件代码,其主要过程就是创建关键参数,并将替换关键参数后的模板文件夹下的文件拷贝到自己的项目中去。

4、使用QGIS的cmake项目构建生成VS工程

该步骤与QGIS工程构建一致。

5、编译该工程

编译过程中有一些语法错误、include包含错误等等,逐一解决后,即生成原始插件,后续功能在该vs工程内开发即可。

思考:观察其生成的文件,主要有两个类构成一个Dialog,一个QgisPlugin,应该新建这两个类就可以生成一个插件,需要进一步研究分析。

插件建成后,经过研究代码,我发现并不用那么麻烦的使用python脚本来生成插件的工程,直接模仿offline_editing_plugin里面的内容,继承QgisPlugin类建一个新的插件类,实现initgui,unload等接口即可,附一些关键的函数实现。

//定义插件关键词
static const QString sName = QObject::tr( "OfflineEditing" );
static const QString sDescription = QObject::tr( "Allow offline editing and synchronizing with database" );
static const QString sCategory = QObject::tr( "Database" );
static const QString sPluginVersion = QObject::tr( "Version 0.1" );
static const QgisPlugin::PluginType sPluginType = QgisPlugin::UI;
static const QString sPluginIcon = QStringLiteral( ":/offline_editing/offline_editing_copy.png" );
//初始化gui
void QgsOfflineEditingPlugin::initGui()
{
delete mActionConvertProject; // Create the action for tool
mActionConvertProject = new QAction( QIcon( ":/offline_editing/offline_editing_copy.png" ), tr( "Convert to Offline Project…" ), this );
// Add the icon to the toolbar
mQGisIface->addDatabaseToolBarIcon( mActionConvertProject );
mQGisIface->addPluginToDatabaseMenu( tr( "&Offline Editing" ), mActionConvertProject );
}
//卸载
void QgsOfflineEditingPlugin::unload()
{
delete mActionConvertProject;
}
//一些外部函数
QGISEXTERN QgisPlugin *classFactory( QgisInterface *qgisInterfacePointer )
{
return new QgsOfflineEditingPlugin( qgisInterfacePointer );
} // Return the name of the plugin - note that we do not user class members as
// the class may not yet be insantiated when this method is called.
QGISEXTERN QString name()
{
return sName;
} // Return the description
QGISEXTERN QString description()
{
return sDescription;
} // Return the category
QGISEXTERN QString category()
{
return sCategory;
} // Return the type (either UI or MapLayer plugin)
QGISEXTERN int type()
{
return sPluginType;
} // Return the version number for the plugin
QGISEXTERN QString version()
{
return sPluginVersion;
} QGISEXTERN QString icon()
{
return sPluginIcon;
} // Delete ourself
QGISEXTERN void unload( QgisPlugin *pluginPointer )
{
delete pluginPointer;
}

 

参考文章:https://blog.csdn.net/qq_39506222/article/details/83579888

关于QGIS的插件开发(C++)的更多相关文章

  1. qgis 插件开发

    qgis 插件开发 http://blog.csdn.net/v6543210/article/details/40480341

  2. QGIS 3.14插件开发——Win10系统PyCharm开发环境搭建四步走

    前言:最近实习要求做一个QGIS插件,网上关于QGIS 3.14插件开发环境搭建的文档不多,而且也不算太全面.正好实习的时候写了一个文档,在这里给大家分享一下. 因为是Word转的Markdown,可 ...

  3. QGIS 插件开发Debug教程——使用Pycharm

    参考文章:Remote Debugging Guide for Python PyQGIS CookBook 16.4. IDE settings for writing and debugging ...

  4. JavaScript学习笔记(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  5. jira的插件开发流程实践

    怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...

  6. Vue插件开发入门

    相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...

  7. 【原创】记一次Project插件开发

    一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...

  8. JavaScript学习总结(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  9. [Tool] Open Live Writer插件开发

    一 前言 Windows Live Writer(简称 WLW)开源之后变成 Open Live Writer(简称 OLW),原先 WLW 的插件在 OLW 下都不能用了,原因很简单,WLW 插件开 ...

随机推荐

  1. 计算机网络参考模型和5G模型的那些事

    一.分层思想 二.OSI参考模型 三.TCP/IP协议族 四.数据封装和解封装过程 五.层间通讯过程 六.3GPP规范及5G协议栈 一.分层思想 享用牛奶的人未必了解其生产过程 使用网络的人未必知道数 ...

  2. React项目中应用TypeScript

    一.前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的 例如和vue.react 这些框架结合使用的时候,会有一定的门槛 使用 TypeScri ...

  3. Apache Dolphin Scheduler - Dockerfile 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  4. 项目需求分析与建议——NABCD模型

    特点一:旧物再利用N:需求:在我们的校园生活中,会遇到许多自己用不到的东西例如,学过的课本.废置的闲置物品等,这些"废物"往往占据着许多空间却不能够发挥自身的价值,通过我们的校园二 ...

  5. ESP8266- AP模式的使用

    打算通过该模式,利用手机APP完成配网 • AP,也就是无线接入点,是一个无线网络的创建者,是网络的中心节点.一般家庭或办公室使用的无线路由器就是一个AP. • STA站点,每一个连接到无线网络中的终 ...

  6. ecshop 加入购物车和直接购买同时存在的方法

    一.首先将直接购买的链接设置为 <a href="javascript:bool =1;addToCart({$goods.goods_id})"> bool值为1,g ...

  7. Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”

    Navicat连接数据库成功,新建查询时提示错误"Cannot create file --" 原因:编辑连接{高级}<设置位置>被修改,该oci.dll不正确 解决方 ...

  8. 让selenium规避网站的检测

    在使用selenium对某些网站模拟访问的时候会被检测出来,检测出来之后就有可能拿不到我们想要的数据,那么我们怎么可以规避掉呢? 在使用谷歌浏览器的时候我们右键-检查-console-输入window ...

  9. anchor-animation

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. P1791-[国家集训队]人员雇佣【最大权闭合图】

    正题 题目链接:https://www.luogu.com.cn/problem/P1791 题目大意 有\(n\)个人,雇佣第\(i\)个需要\(A_i\)的费用,对于\(E_{i,j}\)表示如果 ...