QGIS-创建QGIS项目


前言

本文意在整理学习资料,以备不时之需。如有谬误,欢迎指正。
安装环境:Windows10+VS2022+QT5.14.2
VS敲代码及环境配置还是有一定优势的,其环境配置更直接更简单。
本次采用VS2022进行编写(已安装QT插件)安装VS+qt环境
参考文章:http://t.csdn.cn/04U0g


一、创建项目

创建一个SampleLabelTool 的项目
release 的版本就好,有些debug后会出错。
编译器版本 5.14.2_msvc2017_64

  • 包含目录
D:\QT\OSGeo4W\include
D:\QT\OSGeo4W\apps\qgis-ltr\include
D:\QT\OSGeo4W\apps\Qt5\include
D:\QT\OSGeo4W\apps\Qt5\include\QtGui
D:\QT\OSGeo4W\apps\Qt5\include\QtXml
D:\QT\OSGeo4W\apps\Qt5\include\QtWidgets
D:\QT\OSGeo4W\apps\Qt5\include\QtCore
  • 库目录
D:\QT\OSGeo4W\apps\qgis-ltr\lib
D:\QT\OSGeo4W\apps\Qt5\lib
  • 附加依赖项
qgis_core.lib
qgis_app.lib
qgis_gui.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib

当后期需要添加一些模块的时候,记得添加相应的文件路径(包含目录、附加依赖项)!!!

  • 预处理器
_USE_MATH_DEFINES
  • C++语言标准
ISO C++ 17标准

复制以下路径下的dll到项目目录

D:\QT\OSGeo4W\bin
D:\QT\OSGeo4W\apps\Qt5\bin
D:\QT\OSGeo4W\apps\qgis-ltr\bin

复制D:\QT\OSGeo4W\apps\Qt5\plugins下面的platforms文件夹到文件生成的exe目录下(如:D:\VisualStudio\projects\SampleLabelTool2\x64\Release

二、代码编写

1.引入库

代码如下(示例):

#include "SampleLabelTool.h"
#include <QtWidgets/QApplication>
#include<QgsApplication.h>

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

注:到此处可以尝试运行监测环境配置

2.绘制界面

在VS中直接用Qt Designer打开ui。
若打开会闪退,文件打开不稳定。
扩展-》Qt VS Tools->create pro
创建pro文件结束后,可以在文件夹直接以QT编译器打开
mapCanvas
如上图所示,拖一个widget到窗体中,并使窗口右键布局设置为栅格布局gridLayout(撑满窗体)
然后将widget更名为widget_mapCanvas

3.编写代码

1.初始化画布

在SampleLabelTool.h中添加#include <QgsMapCanvas.h>

void SampleLabelTool::initMapCanvas(QWidget* parent)
{
    mapCanvas = new QgsMapCanvas(parent);//创建画布
    QGridLayout* pLayout = new QGridLayout(parent);//设置画布窗口为栅格布局
    pLayout->addWidget(mapCanvas, 0, 0, 1, 1);//添加画布到栅格布局中
    pLayout->setMargin(0);//设置栅格布局的空隙为0
    QgsEditorWidgetRegistry a;
    a.initEditors(mapCanvas);//注册画布
}

2.打开栅格数据

void SampleLabelTool::addRaster(QString rasterPath, QString basename)
{
	qDebug() << "rasterPath :" << rasterPath;
	qDebug() << "basename :" << basename;
	QgsRasterLayer* rasterLayer = new QgsRasterLayer(rasterPath, basename, "gdal");

	qDebug() << "isValid :" << rasterLayer->isValid();
	if (!rasterLayer->isValid()) {
		QMessageBox::critical(this, "error", "open raster file error");
		return;
	}
	QgsProject::instance()->addMapLayer(rasterLayer);
	mapCanvasLayerSet->append(rasterLayer);
	mapCanvas->setExtent(rasterLayer->extent());
	mapCanvas->setLayers(*mapCanvasLayerSet);
	mapCanvas->setVisible(true);
	mapCanvas->freeze(false);
	mapCanvas->refresh();
}

2.打开矢量数据

void SampleLabelTool::addVector(QString vectorPath, QString basename)
{
	qDebug() << "vectorPath :" << vectorPath;
	qDebug() << "basename :" << basename;
	QgsVectorLayer* vecLayer = new QgsVectorLayer(vectorPath, basename, "ogr");
	if (!vecLayer->isValid()) {
		QMessageBox::critical(this, "error", "open shape file error");
		return;
	}
	QgsProject::instance()->addMapLayer(vecLayer);
	mapCanvasLayerSet->append(vecLayer);
	mapCanvas->setExtent(vecLayer->extent());
	mapCanvas->setLayers(*mapCanvasLayerSet);
	mapCanvas->setVisible(true);
	mapCanvas->freeze(false);
	mapCanvas->refresh();
}

全部代码


总结

实现QGIS二次开发的环境配置,以及简单的代码编写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值