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

半腔热情 提交于 2019-12-24 01:04:40

        在这介绍的是通过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<QgsMapLayer *>() << my_rasterlayer);
	canvas.refresh();

总结

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!