在这介绍的是通过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();
总结
以上为实现该功能的主要代码,可以漫游与缩放。


来源:CSDN
作者:阿酷亚莫塔塔
链接:https://blog.csdn.net/qq_31793023/article/details/103504937