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

21 篇文章 7 订阅
15 篇文章 35 订阅

        在这介绍的是通过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();

总结

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值