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
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第1张图片

4.下载osgeo4w-setup-x86_64.exe
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第2张图片

  • 双击osgeo4w-setup-x86_64.exe

  • Andvance Install

  • Install from Intenet

  • 选择安装路径D:\OSGeo4W64

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

  • Direct Connection

  • 随便选择一个站点

  • 在"Search"框中输入"qt5-devel"(表示搜索qt5二次开发的依赖库),点击一下对应的"Skip"(如果已经安装则是Keep状态),即可下载相应版本的二次开发依赖库,如下图:
    QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第3张图片

  • 再在"Search"框中输入"qgis-devel"(表示搜索qgis二次开发的依赖库),点击对应的"Skip",即可下载相应版本的二次开发依赖库,如下图:QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第4张图片

  • 下一步,取消勾选QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第5张图片

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

  • 完成后依赖项如图:
    QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第6张图片
    QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第7张图片QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第8张图片

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

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

1.打开VS,下载QT VS Tools插件
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第9张图片
2.QT VS Tools插件中设置QT版本
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第10张图片

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

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

4.打开VS,新建Qt Widgets Application项目,命名为gisTest2–next–next–finish
5.gisTest2项目右键属性,C/C++ 点击常规,附加包含目录设置,如下图:
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第11张图片
6.gisTest2项目右键属性,链接器中,点击常规,附加库目录设置,如下图:
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第12张图片
7.gisTest2项目右键属性,链接器中,点击输入,附加依赖项设置,如下图:
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第13张图片
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\路径下,如图:QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第14张图片

三、测试

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

#include "gisTest2.h"
#include 

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 
#include 
#include 
#include 

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 
#include "ui_gisTest2.h"
#include 
#include 
#include 


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项目,结果如图:
QGIS3.18.3(自带QT5)+VS2019二次开发环境搭建及测试_第15张图片

注意

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

你可能感兴趣的:(QGIS,c++,qt,windows,qgis,经验分享)