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