QT关于QGIS3.26的二次开发

目录

 

1、使用平台以及版本

2、显示一张tif格式的图片

3、代码的具体分析

4、一点基础知识

5、其他代码


1、使用平台以及版本

VS 2022  编译器MSVC2019

QT版本 5.15.2

系统:win10

QGIS版本 3.26.9

2、显示一张tif格式的图片

代码:

#include "QtWidgetsApplication2.h"

#include <QtWidgets/QApplication>
#include <qgsapplication.h>
#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsmaptoolpan.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication2 w;
    
	QgsMapCanvas map_canvas;
	QgsRasterLayer layer(R"(C:\Users\jin'yi'zhi\Desktop\images\111.tiff)");  //括号内的路径是本地影像路径,需要更改
	map_canvas.setLayers({ &layer });
	map_canvas.setExtent(layer.extent());
	map_canvas.refresh();
	QgsMapToolPan map_tool_pan(&map_canvas);
	map_canvas.setMapTool(&map_tool_pan);

	w.setCentralWidget(&map_canvas);
	w.show();

	
    return a.exec();
}

运行结果:

 图片是jpg格式的,我拿转换器转换成tiff格式,就可以显示出来了。

3、代码的具体分析

QtWidgetsApplication2 w;

这里创建了一个名为 wQtWidgetsApplication2 对象,是应用程序的主窗口

QgsMapCanvas map_canvas;

创建了一个名为 map_canvas 的地图画布,用于显示地图图层和进行交互操作

QgsRasterLayer layer(R"(C:\Users\jin'yi'zhi\Desktop\images\111.tiff)");

QgsRasterLayer layer(...);: 创建一个名为 layer 的光栅图层对象,使用指定的 TIFF 影像文件作为图层数据。文件路径需要根据实际情况进行更改。

map_canvas.setLayers({ &layer });

map_canvas.setLayers({ &layer });: 将创建的图层对象添加到地图画布中,这样地图画布就能够显示该图层的内容。

map_canvas.setExtent(layer.extent());

map_canvas.setExtent(layer.extent());: 设置地图画布的显示范围为图层的范围,确保整个图层都能在画布中显示出来。

map_canvas.refresh();

map_canvas.refresh();: 刷新地图画布,使添加的图层和范围生效显示。

QgsMapToolPan map_tool_pan(&map_canvas);

QgsMapToolPan map_tool_pan(&map_canvas);: 创建一个名为 map_tool_pan 的地图工具,用于实现平移地图的交互操作。

map_canvas.setMapTool(&map_tool_pan);

map_canvas.setMapTool(&map_tool_pan);: 将地图工具设置为平移工具,这样用户就可以通过拖动地图来改变视图位置。

w.setCentralWidget(&map_canvas);

w.setCentralWidget(&map_canvas);: 将地图画布设置为主窗口的中央部件,使其成为应用程序窗口的核心显示区域。

w.show();: 显示主窗口,将创建的地图画布和图层显示出来,允许用户与地图进行交互。

4、一点基础知识

tif格式是栅格数据,例如图像,是由多个像素点组成,一般用在生成地图山脉,河流那种背景。

而shapefile格式是矢量数据,存储的是地图边框的数据点,也包括颜色,格式形式是xxx.shp,但是这个文件不能单独存在,同级目录下必须包含dbf 数据表 prj 坐标信息等其他信息格式。

就像是这个图,就不仅包含了shp格式,同级目录下也需要其他的格式。

5、其他代码

 

代码:

//模块二   显示
	QtWidgetsApplication2 w;
	QgsMapCanvas map_canvas;
	QString shapefilePath = "C:/Users/jin'yi'zhi/Desktop/qu3/qu-sheng.shp";
	//shp不能单独存在 读取的同级目录下必须存在.shp — 图形格式,用于保存元素的几何实体。

	/*.shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。

		.dbf — 属性数据格式,以dBase III + 的数据表格式存储每个几何形状的属性数据。*/
	QgsVectorLayer* vectorLayer = new QgsVectorLayer(shapefilePath, "MyShapefile", "ogr");

	if (vectorLayer->isValid())
	{
		map_canvas.setLayers(QList<QgsMapLayer*>() << vectorLayer);
		map_canvas.setExtent(vectorLayer->extent());
		map_canvas.refresh();

		QgsMapToolPan map_tool_pan(&map_canvas);
		map_canvas.setMapTool(&map_tool_pan);

		w.setCentralWidget(&map_canvas);
		w.resize(1000, 900);
		w.show();
	}
	else
	{
		qDebug() << "Error loading layer!";
	}

运行结果:

代码:

QtWidgetsApplication2 w;
	QWidget* centralWidget = new QWidget(&w);
	QVBoxLayout* layout = new QVBoxLayout(centralWidget);

	QgsMapCanvas* mapCanvas = new QgsMapCanvas(centralWidget);
	layout->addWidget(mapCanvas);

	QString shapefilePath = "C:/Users/jin'yi'zhi/Desktop/hubei/hubei.shp";
	QgsVectorLayer* vectorLayer = new QgsVectorLayer(shapefilePath, "MyShapefile", "ogr");

	if (vectorLayer->isValid())
	{
		
		QgsProject::instance()->addMapLayer(vectorLayer);
		mapCanvas->setExtent(vectorLayer->extent());
		mapCanvas->setLayers(QList<QgsMapLayer*>() << vectorLayer);
		mapCanvas->refresh();

		
	}
	else
	{
		qDebug() << "Error loading layer!";
	}

	QgsMapToolPan* mapToolPan = new QgsMapToolPan(mapCanvas);
	mapCanvas->setMapTool(mapToolPan);

	w.setCentralWidget(centralWidget);
	w.resize(1000, 900);
	w.show();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值