QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试

QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试


前言

按网上的qt+qgis+vs的编译流程总是出现不同的问题,实验很久也没完全成功,看网上除了自己编译之外,还可以采用官网已经编译好的QGIS版本+VS搭建QGIS二次开发环境,本文主要记载自己成功搭建QGIS二次开发环境并且测试的流程


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境搭建前的准备

1.本文所搭建的二次开发环境各软件版本为QGIS3.18.3(自带QT5)+VS2019-----release x64

2.VS2019中安装VS 2017编译器

3.安装QGIS3.18.3
在这里插入图片描述

4.下载osgeo4w-setup-x86_64.exe
在这里插入图片描述

  • 双击osgeo4w-setup-x86_64.exe

  • Andvance Install

  • Install from Intenet

  • 选择安装路径D:\OSGeo4W64

  • 选择安装包路径D:\OSGeo4W64\Temp

  • Direct Connection

  • 随便选择一个站点

  • 在"Search"框中输入"qt5-devel"(表示搜索qt5二次开发的依赖库),点击一下对应的"Skip"(如果已经安装则是Keep状态),即可下载相应版本的二次开发依赖库,如下图:
    在这里插入图片描述

  • 再在"Search"框中输入"qgis-devel"(表示搜索qgis二次开发的依赖库),点击对应的"Skip",即可下载相应版本的二次开发依赖库,如下图:在这里插入图片描述

  • 下一步,取消勾选在这里插入图片描述

  • 下一步、弹出对话框中点击确定、完成

  • 完成后依赖项如图:
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 每个找出五个文件夹下的压缩文件,分别解压,会得到五个apps文件夹,分别将五个文件夹复制到D:\QGIS-3.18.3(即你的QGIS安装文件夹)

二、开始搭建项目,设置环境

1.打开VS,下载QT VS Tools插件
在这里插入图片描述
2.QT VS Tools插件中设置QT版本
在这里插入图片描述

3.用户环境变量配置(设置完后重启电脑)
“Path”:添加"$(QGis安装路径)\bin"

“QTDIR”:设置为"$(QGis)安装路径\apps\Qt5"

4.打开VS,新建Qt Widgets Application项目,命名为gisTest2–next–next–finish
5.gisTest2项目右键属性,C/C++ 点击常规,附加包含目录设置,如下图:
在这里插入图片描述
6.gisTest2项目右键属性,链接器中,点击常规,附加库目录设置,如下图:
在这里插入图片描述
7.gisTest2项目右键属性,链接器中,点击输入,附加依赖项设置,如下图:
在这里插入图片描述
8.将下列目录中的dll文件复制到gisTest2项目.exe文件同级目录中(D:\QGIS_workspace\gisTest2\x64\Release)
D:\QGIS-3.18.3\apps\qt5\bin
D:\QGIS-3.18.3\apps\qgis\bin
D:\QGIS-3.18.3\bin
9.将D:\QGIS-3.18.3\apps\qt5\plugins\中的platforms文件夹复制到D:\QGIS_workspace\gisTest2\x64\Release\路径下,如图:在这里插入图片描述

三、测试

1.将如下代码取代gisTest2项目的main.cpp中的内容:

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

int main(int argc, char* argv[])
{
    QgsApplication a(argc, argv, true);
    QgsApplication::setPrefixPath("D:\QGIS-3.18.3\apps\qgis", true);//注意切换你的路径
    QgsApplication::initQgis();  //初始化QGIS应用
    gisTest2 w;  //创建一个窗体,类似于Qt
    w.show();

    return a.exec();
}

2.将如下代码取代gisTest2项目的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();
}

3.将如下代码取代gisTest2项目的gisTest2.h中的内容:

#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();

};

4.release下运行gisTest2项目,结果如图:
在这里插入图片描述

注意

1.VS中一切操作都基于release
2.测试实现的功能是打开一个shp文件并显示
3.经测试发现QT版本为5.11.2
4.可能测试时会遇到error C2065: “M_PI”: 未声明的标识符,解决方法如下https://blog.csdn.net/liu_feng_zi_/article/details/84816763

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学海一叶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值