qgis二次开发环境搭建(超级详细)
发布日期: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 官方网站,进入“下载”页面。
  • 选择适合你的操作系统(Windows、Linux、Mac)和QGIS的版本(桌面版或服务器版)。
  • 选择正确的安装包类型。由于 QGIS 开源下载量大,下载速度较慢(特别是在中国大陆互联网环境下),建议选择镜像站点或使用下载工具加速。
  • 选择“附加安装内容”(Advance Install)或“从互联网安装”(Install from Internet)的方式。
  • 下载完成后,QGIS的二次开发包会包含大量必要的头文件和库文件。你只需按照默认路径安装即可。

    三、项目开发环境搭建

    在 QGIS 二次开发开始前,我们需要配置 Visual Studio 的开发环境。

  • 项目属性设置

    • 右键点击项目文件,选择“属性”(Properties)。
    • 选择“常规”(General)选项卡,确保 优化级别 设置为 Release。这是为了避免与 QGIS 的 Debug 版本混淆而产生的编译错误。
  • 添加 QGIS 库文件

    • 在 Visual Studio 中,右键点击项目文件,选择“属性”——“C/C++”——“附加包含目录”(Include Directory),然后添加以下路径:
      C:\OSGeo4W\include
      C:\OSGeo4W\apps\qgis\include
    • 接着去到“链接器”(Linker)选项卡,添加以下三种库文件:
      C:\OSGeo4W\apps\qgis\lib\qgis_core.lib
      C:\OSGeo4W\apps\qgis\lib\qgis_app.lib
      C:\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二次开发的开发环境,并完成简单的应用开发。如果有任何问题,欢迎在 Reddit 或 Stack Overflow 上与其他开发者交流。

    希望这篇文章能为你节省时间,避免重复同样的错误。

    上一篇:01.QT中点击弹出新页面
    下一篇:12012.memtester内存测试

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月21日 15时26分12秒