QGIS-环境配置

学习笔记,主要用于记录学习过程,及解决问题。如有侵权,请联系我。

前言

本人是一名在校学生,应学校要求,学习QT+QGIS,进行简单的遥感应用实现。


一、学习环境

Windows10+VS2022+QT5.14.2+QGIS3.22.14

二、参考文章

QGIS二次开发环境配置
其中,VS+QT环境较为简单,但QGIS的二次开发环境属实困难要下很多次,一不注意时间就从指尖溜走了。
便捷下载:
QT5.14.2:http://t.csdn.cn/CtIeM(其他博主)
QT安装想好都会要什么功能,维护时再加组件太难了

osgeo4W安装包

osgeo4W太难装了,给个自己的环境敢的可以直接用(CSDN一个资源限制只有1G):
QGIS3.22.12 免安装(1)
QGIS3.22.12 免安装(2)
QGIS3.22.12 免安装(3)
QGIS3.22.12 免安装(4)
QGIS3.22.12 免安装(5)
链接:https://pan.baidu.com/s/1x8MgeeMoYjP_8rZYvS4UdA?pwd=0997

三、测试环境

main文件修改:

#include "Qt_QGIS.h"
#include <QtWidgets/QApplication>
#include<qgsapplication.h>

int main(int argc, char *argv[])
{
    /*QApplication a(argc, argv);*/
    QgsApplication a(argc, argv, true);
    QgsApplication::setPrefixPath("D:/QT/OSGeo4W/apps/qgis-ltr", true);
    QgsApplication::initQgis();
    Qt_QGIS w;
    w.show();
    return a.exec();
}

头文件修改:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Qt_QGIS.h"
#include<QgsRasterLayer.h>
#include<QgsMapCanvas.h>
#include<QMessageBox>
#include<qgseditorwidgetregistry.h>
#include<qgslayertreemapcanvasbridge.h>
#include<QFileDialog.h>
#include<qDebug.h>

class Qt_QGIS : public QMainWindow
{
    Q_OBJECT

public:
    QgsMapCanvas* mapCanvas;
    QgsLayerTreeMapCanvasBridge* bridge;

    Qt_QGIS(QWidget *parent = nullptr);
    ~Qt_QGIS();
    void initMap(QWidget* parent);
    void addProject(QString projectPath);
    void addRaster(QString rasterPath);
    void addVector(QString vectorPath);
private:
    Ui::Qt_QGISClass ui;
};

cpp文件修改:

#include "Qt_QGIS.h"

Qt_QGIS::Qt_QGIS(QWidget* parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	initMap(ui.widget);
	addProject("E:\\Temp\\test.qgz");
	addRaster("E:\\RSdata\\GF_test.tif");
	addVector("E:\\RSdata\\GF_NBC.shp");
}

Qt_QGIS::~Qt_QGIS()
{}

void Qt_QGIS::initMap(QWidget* parent)
{
	mapCanvas = new QgsMapCanvas(parent);
	QGridLayout* pLayout = new QGridLayout(parent);
	pLayout->addWidget(mapCanvas, 0, 0, 1, 1);
}
void Qt_QGIS::addProject(QString projectPath)
{
	QgsProject::instance()->read(projectPath);
	QgsEditorWidgetRegistry a;
	a.initEditors(mapCanvas);
	bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), mapCanvas, this);
}
void Qt_QGIS::addRaster(QString rasterPath)
{
	QgsRasterLayer* rasterLayer = new QgsRasterLayer(rasterPath, "raster", "gdal");
	if (rasterLayer->isValid()) {
		QgsProject::instance()->addMapLayer(rasterLayer);
		mapCanvas->refresh();
	}
	else {
		QMessageBox::critical(this, "error", "open raster file error");
	}
}
void Qt_QGIS::addVector(QString vectorPath)
{
	QgsVectorLayer* rasterLayer = new QgsVectorLayer(vectorPath, "Vector", "ogr");
	if (rasterLayer->isValid()) {
		QgsProject::instance()->addMapLayer(rasterLayer);
		mapCanvas->refresh();
	}
	else {
		QMessageBox::critical(this, "error", "open shape file error");
	}
}

遗留问题

1、环境中dll太多了,每次新建项目都需要重新拷贝,耗内存。尝试利用系统环境减少复杂程度,未果!T_T
2、无法采用Qt Create进行设计,环境配置无法运行,报错无法解析的内部指令。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值