在Visual Studio 2019 搭建 QGIS3.22 二次开发环境

本文介绍了如何在Visual Studio 2019中搭建QGIS 3.22的二次开发环境,包括环境准备、设置项目包含目录和库目录、附加依赖项、调试环境以及复制必要的DLL文件。重点是通过OSGeo4W安装所需库,并详细说明了在VS项目属性中配置Qt和QGIS开发库的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 环境准备

下载 Visual Studio。我用的是 2019 社区版。

下载 OSGeo4W。这是 Windows 环境下(OSGeo for Windows)的一个程序包管理器。我们需要的所有包都通过本工具下载获取。

OSGeo4W 是一个向导式的包管理器。因为软件源位于国外的原因,安装比较慢。好在国内也有武大的镜像可用。在选择镜像地址的步骤添加 http://gwmodel.whu.edu.cn/mirrors/osgeo4w 这个地址就行了。

Figure 1

典型安装会下载许多用不到的库。所以最好选择高级安装,手动选择需要的库:

  • Desktop 分类下点选 qgis-ltr:这个是 QGIS 桌面端软件(你甚至都不需要单独去下载 QGIS 发行包,用这个就行了);
  • Libs 分类下点选 qgis-ltr-devel:这个是 QGIS 的开发库文件;
  • Libs 分类下点选 qt5-devel:这个是 Qt 的开发库文件。

Edit:经测试,QGIS 并不会自动选择 Qt 作为依赖,需要手动点选。

剩下的 OSGeo4W 会自动帮你选择依赖项。

Commandline_Utilities 分类下是各种命令行工具,包括 Python;Web 分类下主要是 QGIS Server 相关。

开发库下载完毕之后就可以准备建立 C++ 项目了。建立一个 C++ 空项目。我使用的是 VS 2019 社区版。

Edit:

2022 年初,最新长期支持版 3.22发布。议使用最新版本。基于 Qt4 的老旧的 QGIS 2.18 版已停止支持。不建议使用。

2. 设置项目包含目录和库目录

打开新建项目的属性页,在左侧选择“VC++ 目录”。

以下均以长期稳定版 qgis-ltr 为例。

包含目录:

打开项目属性,将下列目录添加到“包含目录”中:

C:\OSGeo4W\apps\qgis-ltr\include
C:\OSGeo4W\apps\Qt5\include\QtWidgets
C:\OSGeo4W\apps\Qt5\include\QtXml
C:\OSGeo4W\apps\Qt5\include\QtGui
C:\OSGeo4W\apps\Qt5\include\QtCore
C:\OSGeo4W\apps\Qt5\include

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

库目录:

将下列目录添加到“库目录”中:

C:\OSGeo4W\apps\qgis-ltr\lib
C:\OSGeo4W\apps\Qt5\lib

3. 设置附加依赖项

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

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

4. 设置调试环境

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

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

这一步的目的是让程序在调试的过程中,能正确的获取到运行时所需的 DLL 动态库。注意在部署的时候,需要把所有依赖的 DLL 拷贝出来跟程序一起打包发布。

5.复制dll文件

将C:\OSGeo4W\apps\Qt5\plugins文件下的platforms文件夹防止到运行项目的目录下,同时将需要的的dll复制到项目目录下

示例:

#define _USE_MATH_DEFINES
#include <cmath>
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgsmapcanvas.h>
#include <qgsvectorlayer.h>
#include <qgsproject.h>

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

    // 创建 QgsApplication 实例
    QgsApplication app(argc, argv, true);

    // 设置并检查数据插件目录
    QgsProviderRegistry::instance("C:/OSGeo4W/apps/qgis-ltr/plugins");

    // 控制台打印已载入的插件目录
    qDebug() << "QGIS data providers loaded:" << QgsProviderRegistry::instance()->providerList() << Qt::endl;

    // 设置 GDAL 数据目录环境变量
    qputenv("GDAL_DATA", "C:/OSGeo4W/share/gdal");

    // 创建 QgsCanvas 画布实例
    QgsMapCanvas c;

    const QString file_dir = "E:/shapefile/water.shp";
    // 从磁盘 .shp 文件创建矢量图层
    QgsVectorLayer* pVectorLayer = new QgsVectorLayer(file_dir, "river");

    // 确认图层是否创建成功
    qDebug() << "Is layer valid:" << pVectorLayer->isValid();

    // 将图层添加到画布上
    c.setLayers(QList<QgsMapLayer*>() << pVectorLayer);

    // 设置画布窗体标题并显示画布
    // 画布本身是 QWidget 的子类,因此可以承担 QWidget 的所有操作
    c.setWindowTitle("QGIS 二次开发:画布");
    c.show();

    // 缩放到图层的空间范围
    c.zoomToFullExtent();

    // 启动 QgsApplication 实例
    return app.exec();

}

参考资料:
http://caiyi.tech/post.html?postKey=qgis_dev_1_env_setup

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陨星落云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值