qgis二次开发环境搭建(超级详细)

阅读: 评论:0

qgis⼆次开发环境搭建(超级详细)
最近有⼀个项⽬要求基于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下载
< ,安装使⽤默认路径,直接上图
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;    //创建⼀个窗体,类似于Qtpvb边角料
w.show();
();
}
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();
//

本文发布于:2023-08-18 07:01:17,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/221980.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:版本   下载   开发   环境   编译   点击   问题   测试
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图