最近有一个项目要求基于qgis+QT进行二次开发开发,要使用到qgis平台。陆陆 续续花了差不多两个多星期,在把开发环境搭建起来。

首先就面临2种选择,一种 到qgis官网下载源码,进行编译,此 情况我走了一般编译成功,但是很麻烦,还有很多问题没有解决。

另外,直接在线下载, 官方网站 编译好的二次开发SDK包。本篇 文章采用的是第2种方法,简单快捷,但是也遇到各种各样的问题,现记录如下,尽可能的详细。期间看过很多大神的博客,在此表示感谢。

一,开发环境《注意很重要,我就是在此没有注意,遇到各种坑,耽误不少时间》

VS2015 + QT5.10.1 + OSGeo4W

注意,QT 平台的版本与qgis下载的版本有关,本文采用QT是32位, 通过OSGeo4w下载也是qgis也是32位,如果使用qt是64位,那么应该使用OSGeo4w64来下载qgis;

如果下载qgis-ltr(官网的长期支持版,qgis 2.18),那么建议qt采用5.0以下的版本;

如果下载qgis 是3.0版本以上,个人建议qt版本,下载高于qt5.9.2

另外如果是使用VS2013,那么好像不能编译qgis3.0版本以上的,c++11个部分语法报错。好了不啰嗦了,正式介绍了。

二,关于qgis二次开发SDK下载

官网网站 https://www.qgis.org/en/site/

下载OSGeo4w  https://www.qgis.org/en/site/forusers/download.html   自己选择32位还是64位, 这个软件的下载速度很慢,要有耐心,反正在帝都只有一般20-40kb/s,还容易出错。

osgeo4w-setup-x86.exe ,安装使用默认路径,直接上图

1 选择Andvance Install

2 Install  from Intenet

3 中间省略几步,使用默认即可

4 到这个步骤,在搜索框内输入qgis, desktop表示下载安装桌面版的qgis,lib表示我们要二次开发sdk库

5 我在这里将qgis3.2版本, qgis2.18长期版都下载下来了, 实际可根据自己的情况进行选择,下载

过程很漫长,并且会下载很多依赖的库。很 耗时。

三,vs2015搭建工程

由于我们qgis的二次开发包,是release版本,所以我们的vs工程环境,编译也应该是release版本,否则报各种错误,

大致是debug与release版本混淆导致,错误如下图所示。

对工程项目进行配置,加载第3方的 qgis库,

1,项目工程,右键属性-->C/C++ 点击常规,附加包含目录,点击文件夹图标,添加qgis库的头文件目录,我在此处选择的是

qgis3.2版本。

C:\OSGeo4W\include

C:\OSGeo4W\apps\qgis\include

2, 链接器中,常规 选择qgis的库

3,链接器,输入,书写加载qgis库,

qgis_core.lib  qgis_app.lib  qgis_gui.lib

4, 关于测试工程的代码,如下,非本人原创,参考其他博客得来。

首先,main.cpp

#include "gisTest2.h"
#include <qgsapplication.h>

int main(int argc, char *argv[])
{

QgsApplication a(argc, argv, true);
    QgsApplication::setPrefixPath("C:/OSGeo4W/apps/qgis", true);
    QgsApplication::initQgis();    //初始化QGIS应用
    gisTest2 w;    //创建一个窗体,类似于Qt
    w.show();

return a.exec();
}

gisTest2.cpp代码如下:

#include "gisTest2.h"
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qfiledialog.h>
#include <qgsvectorlayer.h>

gisTest2::gisTest2(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(600, 400);

// create the menus and then add the actions to them.
    fileMenu = this->menuBar()->addMenu("File");
    openFileAction = new QAction("Open", this);
    this->connect(openFileAction, SIGNAL(triggered(bool)), this, SLOT(on_openFileAction_triggered()));
    fileMenu->addAction(openFileAction);

// initialize the map canvas
    mapCanvas = new QgsMapCanvas();
    this->setCentralWidget(mapCanvas);

mapCanvas->setCanvasColor(QColor(255, 255, 255));
    mapCanvas->setVisible(true);
    mapCanvas->enableAntiAliasing(true);

}

void gisTest2::on_openFileAction_triggered() {
    addVectorLayer();
}

void gisTest2::addVectorLayer()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open shape file"), "", "*.shp");
    QStringList temp = fileName.split('/');
    QString basename = temp.at(temp.size() - 1);
    QgsVectorLayer* vecLayer = new QgsVectorLayer(fileName, basename, "ogr");

if (!vecLayer->isValid())
    {
        QMessageBox::critical(this, "error", QString("layer is invalid: \n") + fileName);
        return;
    }
    mapCanvas->setExtent(vecLayer->extent());
    layers.append(vecLayer);
    mapCanvas->setLayers(layers);
    mapCanvas->refresh();
}

gisTest2.h代码

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_gisTest2.h"
#include <qmenu.h>
#include <qaction.h>
#include <qgsmapcanvas.h>

class gisTest2 : public QMainWindow
{
    Q_OBJECT

public:
    gisTest2(QWidget *parent = Q_NULLPTR);

private:
    // create the menus and then add the actions to them.
    QMenu *fileMenu;
    QAction *openFileAction;

//map canvas
    QgsMapCanvas *mapCanvas;
    QList<QgsMapLayer *> layers;

public slots:
    void on_openFileAction_triggered();
    //

public:
    void addVectorLayer();

};

四,工程项目编译或运行时,提示很多库找不到

将 C:\OSGeo4W\apps\qgis\bin

C:\OSGeo4W\bin

目录下dll文件拷贝到工程目录下,编译搞定,当然运行还是报错,根据错误提示将

C:\OSGeo4W\apps\Qt5\bin  目录下的dll库拷贝,工程目录下,一直到成功编译运行成功为止。

运行结果如下:

关于shp 文件的数据,大家可以到  国家地理信息公共服务平台 http://www.tianditu.gov.cn/index.html 下载

好了,到此初步qgis开发二次开发环境,基本搭建完成了。

qgis二次开发环境搭建(超级详细)相关推荐

  1. VS2019+QGIS开发库二次开发环境搭建

    VS2019+QGIS开发库二次开发环境搭建 总共分为以下步骤: 下载qgis和二次开发库 VS2019搭建开发环境 配置VS2019中的Qt插件 配置完Qt版本后对工程属性进行配置 编写测试代码 运 ...

  2. Win10平台中ANSYS 18.2二次开发环境搭建及关联教程

    笔者关于ANSYS二次开发平台搭建的基础知识均从师访老师在仿真论坛的帖子(链接:https://forum.simwe.com/thread-1021888-1-1.html)里以及他的<ANS ...

  3. DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu)

    DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu) 目录 1.安装nvidia驱动 2.安装CUDA ...

  4. java服务器要二次编译,ecology项目二次开发环境搭建

    ecology项目二次开发环境搭建 Submitted By Weaver 文档版本控制 文档简要信息: 文档主题(Title) ecology项目二次开发环境搭建 作者(Author) 审批者 (T ...

  5. Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017) 安装 Revit 2019 Visual Studio 2017 Revit SDK 2019 配置Addin ...

  6. CAA教程——CATIA二次开发环境搭建

    CAA教程--CATIA二次开发环境搭建 前言 开发环境搭建所需资源 安装注意事项 安装完成后的一些操作 测试程序的运行效果 CATIA帮助文档的设置 VS里利用CATIA帮助文档的查询接口功能 编译 ...

  7. Betaflight二次开发-环境搭建

    关于对BetaFlight的二次开发环境搭建: 下载并修改eabi: https://developer.arm.com/tools-and-software/open-source-software ...

  8. CATIAV5R21+CAA+RADE+VS2008二次开发环境搭建注意事项

    CATIAV5R21+CAA+RADE+VS2008二次开发环境搭建注意事项 安装CATIA ProgramData文件夹复制到C盘 netapi32.dll复制到CATIA安装路径 不勾选的许可证 ...

  9. 泛微OA二次开发环境搭建

    泛微OA二次开发环境搭建 **前言:**本次分享主要分两个方面,1.基于泛微e8测试安装包的二次开发环境:2.基于公司内容OA搭建备份后的二次开发环境,20190819这天是我搭建成功的第一天,经验欠 ...

最新文章

  1. 【经验】如何查看gcc、g++不加-std时的默认版本
  2. SAP PM概念学习
  3. java jtextpane插入图片_java中怎么在JTextArea中添加图片?
  4. mybatis mysql rownum_MyBatis怎样实现MySQL动态分页?
  5. GUI菜单——菜单条、菜单、子条目之间关系
  6. 选32位 64位 oracle,32位PLSQL配置为64位的Oracle和64位系统
  7. WebServices应用集成框架ESB(Enterprise Service Bus 企业服务总线)
  8. php从大到小排列数字,php输入几个数从大到小排序
  9. hook_theme 的重要性
  10. libzbar.a armv7
  11. 计算机网络构成ppt,计算机网络体系结构ppt课件.ppt
  12. 华为与奔驰展开合作 HMS for Car登陆S级轿车
  13. [二分图]luogu 1640 连续攻击游戏
  14. Cocos2d-X-3.0之后的版本的环境搭建
  15. [置顶] android 与JavaScript的互相调用
  16. 初探TweenMax 动画
  17. 多项式polynomial 考试 解题报告
  18. blos硬盘启动台式计算机,台式机加硬盘开机问题解决-戴尔台式机bios设置
  19. 从可回收火箭到AI向善 - 独家专访SpaceX前核心工程师Keenan Johnson
  20. 高薪程序员必备—Redis高性能缓存数据库

热门文章

  1. SqlServer substring用法
  2. linux鼠标回到桌面图标,Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法...
  3. axure 图片切换图片的交互_Axure 交互案例:放大缩小图片
  4. IFIX上位机网络测试画面
  5. 什么是*args和**kwargs?
  6. ipv6网络使用scp,并解决No route to host与no matches found报错
  7. 2018.12.11——全局变量与局部变量
  8. java web之servlet
  9. 【 Linux 网络虚拟化 】Netns
  10. 软件需求和问题解决-转载