QGis二次开发,打开影像并在Qt控件中显示

        在这介绍的是通过QGis的二次开发,将影像打开后然后显示在Qt的控件中,我用的这个控件是QTabWidget。总体的思想是就是将QgsMapCanvas这个类的实例化对象添加到QTabWidget里面,显示QTabWidge的时候就会把QgsMapCanvas也显示出来,这就实现了通过Qt的控件来显示影像。

1.首先将QgsMapCanvas这个类的实例化对象添加到QTabWidget里面

    //将影像界面放入TAB中
	ui.tabWidget->addTab(&canvas, "");
	//将TAB的高设为0
	ui.tabWidget->tabBar()->setMaximumHeight(0);
	//信号与槽
	connect(ui.act_tool_open, SIGNAL(triggered()), this, SLOT(act_tool_open_triggered()));
	

2.显示影像的槽函数

// 获取文件名称
	QString filename = QFileDialog::getOpenFileName(this, "openFile", "E:/tif_sample/2013299");
	if (filename.isEmpty())
	{QMessageBox::critical(this, "警告", "文件名称为空"); return;}
	// 获取栅格图层
	QgsRasterLayer *my_rasterlayer = nullptr;
	QString basename = "tifFile";
	QString provideKey = "";
	if (provideKey.isEmpty())
	{my_rasterlayer = new QgsRasterLayer(filename, basename);}
	else
	{my_rasterlayer = new QgsRasterLayer(filename, basename, provideKey);}
	if (!my_rasterlayer->isValid())
	{QMessageBox::critical(this, "警告", "栅格图层无效"); return;}
	// 显示影像
	//my_rasterlayer->setCrs(QgsCoordinateReferenceSystem("EPSG::32649") );
	QgsProject::instance()->addMapLayer(my_rasterlayer);
	canvas.setExtent(my_rasterlayer->extent());
	canvas.setLayers(QList() << my_rasterlayer);
	canvas.refresh();

总结

以上为实现该功能的主要代码,可以漫游与缩放。

QGis二次开发,打开影像并在Qt控件中显示_第1张图片QGis二次开发,打开影像并在Qt控件中显示_第2张图片

你可能感兴趣的:(C++,Qt,QGis,Qt,QGis)