
qgis二次开发环境搭建(超级详细)
访问 QGIS 官方网站,进入“下载”页面。 选择适合你的操作系统(Windows、Linux、Mac)和QGIS的版本(桌面版或服务器版)。 选择正确的安装包类型。由于 QGIS 开源下载量大,下载速度较慢(特别是在中国大陆互联网环境下),建议选择镜像站点或使用下载工具加速。 选择“附加安装内容”(Advance Install)或“从互联网安装”(Install from Internet)的方式。
发布日期:2021-05-15 02:37:18
浏览次数:19
分类:精选文章
本文共 3861 字,大约阅读时间需要 12 分钟。
QGIS二次开发对于浅层次开发者的实用指南
安装QGIS源码编译环境是一个耗时且充满挑战的过程。作为一名刚入行的开发者,我在搭建QGIS二次开发环境的过程中经历了无数的坑、试和错误。以下是我从头到尾的总结和优化方案,希望能为刚开始接触QGIS开发的同学提供一个清晰的方向。
一、开发环境搭建
在开始QGIS二次开发之前,首先需要搭建一个完整的开发环境。基于我的实际经验,我建议使用以下工具和版本:
- 操作系统: Windows 系统(推荐 Windows 10)
- 开发工具: Visual Studio 2015 或更高版本
- ** QT 版本**: 建议使用 QT 5.10.1 或更高版本
- ** OSGeo4W 环境**: 企业级支持的QGIS软件安装包
在选择 QT版本时,请注意以下事项:
- 如果你选择了 QGIS 长期支持版本(如 QGIS 2.18),则建议使用 QT 5.0 或更低版本。
- 如果你选择了 QGIS 3.0 或更高版本,则需要 QT 5.9.2 或更高版本。
- 如果你使用的是 Visual Studio 2013,则需要警惕:由于 QGIS 3.0 及以后的版本采用了 C++11 标准,Visual Studio 2013 会因为语法报错而让你陷入泥潭。因此,建议使用 Visual Studio 2015 或更高版本。
二、QGIS二次开发 SDK 下载
接下来,我们需要下载QGIS的开发者包。建议通过以下方式操作:
下载完成后,QGIS的二次开发包会包含大量必要的头文件和库文件。你只需按照默认路径安装即可。
三、项目开发环境搭建
在 QGIS 二次开发开始前,我们需要配置 Visual Studio 的开发环境。
项目属性设置:
- 右键点击项目文件,选择“属性”(Properties)。
- 选择“常规”(General)选项卡,确保 优化级别 设置为 Release。这是为了避免与 QGIS 的 Debug 版本混淆而产生的编译错误。
添加 QGIS 库文件:
- 在 Visual Studio 中,右键点击项目文件,选择“属性”——“C/C++”——“附加包含目录”(Include Directory),然后添加以下路径:
C:\OSGeo4W\includeC:\OSGeo4W\apps\qgis\include
- 接着去到“链接器”(Linker)选项卡,添加以下三种库文件:
C:\OSGeo4W\apps\qgis\lib\qgis_core.libC:\OSGeo4W\apps\qgis\lib\qgis_app.libC:\OSGeo4W\apps\qgis\lib\qgis_gui.lib
项目编译:
- 在 Visual Studio 中,将项目设置为 Release 版本,确保所有依赖项已添加完成。
- 编译完成后,检查是否存在 无法找到所需库文件 的错误提示。
- 如果出现此类错误,请按照以下步骤操作:
- 拷贝位于
C:\OSGeo4W\apps\Qt5\bin
目录下的相关.dll
文件到你的项目目录中。 - 再次尝试编译项目。
- 拷贝位于
- 编译成功后,生成的可执行文件即为 QGIS 二次开发的输出产物。
四、测试与调试
为了确保开发环境的正确性,可以编写一个简单的测试项目来验证QGIS的功能。以下是一个简易的示例项目代码:
#include#include #include class MainWindow : public QMainWindow{public: MainWindow(QWidget* parent = nullptr) : QMainWindow(parent) { this->resize(800, 600); // 初始化地图画布 m_mapCanvas = new QgsMapCanvas(); this->setCentralWidget(m_mapCanvas); m_mapCanvas->setCanvasColor(Qt::white); m_mapCanvas->setVisible(true); m_mapCanvas->enableAntiAliasing(true); } ~MainWindow() { delete m_mapCanvas; }private: QgsMapCanvas* m_mapCanvas; QList m_layers;};int main(int argc, char* argv){ QApplication app(argc, argv, true); QApplication::setPrefixPath("C:/OSGeo4W/apps/qgis", true); QApplication::initQgis(); MainWindow wnd; wnd.show(); return app.exec();}
-plus-对应的 header 文件(.h
)如下:
#pragma once#include#include #include "ui_gisTest2.h"#include #include class MainWindow : public QMainWindow{public: MainWindow(QWidget* parent = nullptr) : QMainWindow(parent) { this->resize(600, 400); fileMenu = new QMenu(tr("File")); openFileAction = new QAction(tr("Open"), this); connect(openFileAction, SIGNAL(triggered()), this, SLOT(onOpenFileAction())); fileMenu->addAction(openFileAction); this->setCentralWidget(new QgsMapCanvas()); this->mapCanvas->setCanvasColor(Qt::white); this->mapCanvas->setExtent(QgsVectorLayer::extent()); } ~MainWindow() { delete fileMenu; delete openFileAction; delete mapCanvas; }private: QFile f; QAction* openFileAction; QMenu* fileMenu; QgsMapCanvas* mapCanvas;};
五、常见问题与解决方案
在实际开发过程中,你可能会遇到如下的常见问题:
缺少依赖项:
- 确保你已正确添加了 QGIS 的库文件路径。
- 如果问题依旧未解决,可尝试清理项目目录中的旧编译文件,重新编译。
** DLL 文件缺失**:
- 注意将 Qt 相关的
.dll
文件拷贝到项目目录中。 - 你可以从
C:\OSGeo4W\apps\Qt5\bin
目录中找到相关文件并拷贝到你的项目根目录下。
版本冲突:
- 如果你在使用 QGIS 2.18 的长期支持版本,建议对 Qt 和 Visual Studio 的版本选择进行调整。
六、资源下载与获取
如果你在开发过程中遇到以下资源下载问题:
-
QGIS 二次开发文档:
- QGIS官方文档
- [OSGeo4W 安装指南](https://www.osgeo.org osm4w user manual cn)
-
样例项目:
通过以上步骤,你应该能够顺利搭建一个QGIS二次开发的开发环境,并完成简单的应用开发。如果有任何问题,欢迎在 Reddit 或 Stack Overflow 上与其他开发者交流。
希望这篇文章能为你节省时间,避免重复同样的错误。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月21日 15时26分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07