QGIS二次开发二:不重新编译QGIS进行二次开发

目录

一、下载OSGeo4W

二、配置VS

三、测试代码

四、补充:配置QT插件 

五、导出项目为模板

六、Release模式的一个问题解决


由于重新编译QGIS对于初学者来说还是有一定难度,因此这里介绍另外一种不编译QGIS也能够二次开发的方法,不需要下载QGIS的整套源码。

一、下载OSGeo4W

https://download.osgeo.org/osgeo4w/v2/osgeo4w-setup.exe

然后搜索qgis-ltr,表示长期支持版。当然你也可以选择qgis的其他版本。

其实二次开发用不到上面的qgis desktop,但是为了详细了解qgis的功能还是建议安装。安装之后就可以打开qgis软件。

 然后点击下一页安装即可,注意要把它推荐的依赖项也一起安装了。

 安装完毕如上图所示。

二、配置VS

我选用的是VS2017版本,具体版本要求可以参照官方文档

 这里注意一点:我看其他同学写的教程需要在本地安装QT,然后给VS配置QT插件,添加本地安装的QT环境。再次说明下,这个不是必须的,你可以这样做,但是建议使用QGIS自带的QT环境进行开发。

下面的[OSGeo4W]均表示你本地安装OSGeo4W的文件夹。

(一)新建一个C++空项目,添加一个源文件,名字任意。

(二)打开项目属性,将下列目录添加到VC++目录的“包含目录”中

[OSGeo4W]\apps\Qt5\include
[OSGeo4W]\apps\Qt5\include\QtCore
[OSGeo4W]\apps\Qt5\include\QtGui
[OSGeo4W]\apps\Qt5\include\QtXml
[OSGeo4W]\apps\Qt5\include\QtWidgets
[OSGeo4W]\apps\qgis-ltr\include

OSGeo4W 中,所有安装的库都分门别类存放在 apps 文件夹中。[OSGeo4W]\apps\Qt5\include 下面存放的是 Qt5 的不同模块头文件,按文件夹存放,除了我上面提到的四个基本模块外,可以根据需要添加。

(三)将下列目录添加到VC++目录的“库目录”中

[OSGeo4W]\apps\Qt5\lib
[OSGeo4W]\apps\qgis-ltr\lib

(四)在项目属性页中依次选择“链接器”,“输入”,在“附加依赖项”中添加

Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
qgis_core.lib
qgis_gui.lib

 (五)设置预处理器

在C/C++,预处理器,预处理定义中填入

_USE_MATH_DEFINES

(六)设置C++语言标准

在C/C++,语言,C++语言标准中,设置为ISO C++17 标准 (/std:c++17)

(七)设置编码

在C/C++,所有选项,附加选项中,设置为/utf-8

(八)设置调试环境

在项目属性页中选择“调试”,设置“环境”的值为

PATH=D:\OSGeo4W\bin;D:\OSGeo4W\apps\qgis-ltr\bin;D:\OSGeo4W\apps\Qt5\bin

这一步的目的是让程序在调试的过程中,能正确的获取到运行时所需的 DLL 动态库。

三、测试代码

在刚才新建的cpp文件中添加如下代码

#include <qgsapplication.h>int main(int argc, char **argv)
{// 创建 QgsApplication 实例QgsApplication app(argc, argv, true);
}

成功运行!恭喜你已经完成了QGIS二次开发的环境配置!

四、补充:配置QT插件 

基于 Qt 的程序在运行时需要各种 Qt 插件的支持(如图片格式插件、数据库插件、运行平台插件等)。这些插件文件同样以 DLL 的形式存在于 [OSGeo4W]\apps\Qt5\plugins 文件夹。程序运行过程中如果遇到特定的情况,将动态载入这些插件(如载入 .jpg 图像需要 qjpeg.dll)。所以我们必须告知 Qt 程序插件文件夹的位置。除了把 plugins 文件夹里面的内容直接整个复制到可执行文件同目录之外,我们可以借助 qt.conf 配置文件。在可执行文件同目录下创建 qt.conf 文件,输入如下内容

[Paths]
Plugins=D:/OSGeo4W/apps/Qt5/plugins

如图所示

 

五、导出项目为模板

导出项目为模板后,我们新建项目就可以选择这个模板,就不用再花时间去配置环境,但是QT的插件和调试环境还是要再配置一次!

导出模板

 一直下一步就行

 使用模板新建项目

六、Release模式的一个问题解决

为了使导出的项目模板使用起来更加方便,我分别配置了Debug模式和Release模式的项目属性,但是Debug模式下可以正常运行的项目,Release模式下却报错fatal error LNK1000: Internal error during IMAGE::BuildImage

解决方法是:在配置属性的常规,全程序优化,设置为无全程序优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/59922.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略

文章目录 1. PartitionInfo 分区源码2. Partitioner 分区器接口源码3. 自定义分区策略4. 轮询策略 RoundRobinPartitioner5. 黏性分区策略 UniformStickyPartitioner6. hash分区策略7. 默认分区策略 DefaultPartitioner 分区的作用就是提供负载均衡的能力&#xff0c;或者说对数…

CDC 数据复制:技术、权衡、见解

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景 在本文中&#xff0c;我将定义 CDC 数据复制&#xff0c;简要讨论最常见的用例&#xff0c;然后讨论常见技术及其权衡。最后&#xff0c;我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到…

C++项目:在线五子棋对战(网页版)

项目介绍 本项⽬主要实现⼀个⽹⻚版的五⼦棋对战游戏&#xff0c;其主要⽀持以下核⼼功能&#xff1a; • 用户管理:实现用户注册&#xff0c;用户登录、获取用户信息、用户天梯分数记录、用户比赛场次记录等。 • 匹配对战:实现两个玩家在网页端根据天梯分数匹配游戏对⼿&…

力扣17(电话号码中的字符组合)

题目表述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例1 输入&#xff1a;digits "23" 输出&#xff1…

CSS 的选择器有哪些种类?分别如何使用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素选择器&#xff08;Element Selector&#xff09;⭐ 类选择器&#xff08;Class Selector&#xff09;⭐ ID 选择器&#xff08;ID Selector&#xff09;⭐ 后代选择器&#xff08;Descendant Selector&#xff09;⭐ 子元素选择器&a…

Android Https

本质&#xff1a;在客户端和服务端使用非对称加密协商出一套对称密钥&#xff0c;每次发送数据前加密&#xff0c;收到后解密&#xff0c;达到加密传输 http ssl 在http之下增加了安全层&#xff0c;用于保障http的加密传输 HTTPS连接 TLS连接步骤 1.客户端发送 client h…

模拟出栈的所有顺序(dfs+回溯)

题目&#xff1a; 已知某一个字母序列&#xff0c;把序列中的字母按出现顺序压入一个栈&#xff0c;在入栈的任意过程中&#xff0c;允许栈中的字母出栈&#xff0c;求所有可能的出栈顺序 示例&#xff1a; 输入abc 输出abc、acb、bac、bca、cba 代码如下 #define _CRT_SECURE…

【APITable】教程:创建并运行一个自建小程序

1.进入APITable&#xff0c;在想要创建小程序的看板页面点击右上角的【小程序】&#xff0c;进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序&#xff0c;选择模板&#xff0c;输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…

用C语言实现定积分计算(包括无穷积分/可自定义精度)

关于严谨性的声明&#xff1a; 在用C语言进行定积分的计算之前&#xff0c;我需要声明以下几点&#xff1a; 一、我们所进行定积分计算的函数都是应当是黎曼可积的&#xff0c;这保证了我们即使均匀地分割区间也保证了积分的收敛性。 二、我们同时还应该认识到&#xff0c;鉴…

stm32 cubemx can通讯(1)回环模式

文章目录 前言一、cubemx配置二、代码1.过滤器的配置&#xff08;后续会介绍&#xff09;2.main.c3.主循环 总结 前言 介绍使用stm32cubemx来配置can&#xff0c;本节讲解一个简答&#xff0c;不需要stm32的can和外部连接&#xff0c;直接可以用于验证的回环模式。 所谓回环模…

《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)

文章目录 1. 概念1.1 角色1.2 应用场景1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概念 定义一个适配器&#xff0c;帮助原本不能实现接口的类“实现”该接口 1.1 角色 目标&#xff08;Target&#xff09;&#xff1a;客户端调用的目标接口 被适配者&#xff08…

【kubeadm的配置安装】

目录 一、环境准备二、所有节点安装docker三、部署K8S集群1、查看镜像2、初始化kubeadm方法一&#xff1a;1、修改配置文件2、在线拉取镜像3、初始化 master 方法二、 3、设定kubectl4、所有节点部署网络插件flannel 四、部署 Dashboard1、在 master01 节点上操作 master&#…