QGis二次开发,基本功能实现

21 篇文章 6 订阅
14 篇文章 34 订阅

最近在查看QGIS源码,经过几天的努力把基本功能实现了,界面如下:

其中基本功能包括新建、打开项目、打开矢量文件、打开栅格文件、保存、另存为、漫游、识别、放大、缩小、全图、二次开发帮助、图层管理。因为map工具的实现方式基本都是一样,所以只实现这几个,可还对照源码实现其他功能。

一、文件功能

文件功能可以参照我以前的博客

二、漫游、识别、放大、缩小、全图

1.工具的创建

    //pan工具
	mPan = new QgsMapToolPan(canvas);
	//识别工具
	mIdentify = new myIdentify(canvas);
	//zoomIn
	mZoomIn = new QgsMapToolZoom(canvas, false);
	//zoomOut
	mZoomOut = new QgsMapToolZoom(canvas, true);

2.工具的实现,canvsa是自定义的画布

	canvas->setMapTool(mPan);
	canvas->setMapTool(mIdentify);
	canvas->setMapTool(mZoomIn);
	canvas->setMapTool(mZoomOut);
	canvas->zoomToFullExtent();

三、二次开发帮助

点击后会打开一个网页,网页的网址可能自定义

QDesktopServices::openUrl(QUrl(QLatin1String("https://blog.csdn.net")));

四、图层管理

1.首先初始化图层管理器

	//图层管理器初始化
	m_layerTreeView = new QgsLayerTreeView(this);
	model = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this);
	model->setFlag(QgsLayerTreeModel::AllowNodeRename);
	model->setFlag(QgsLayerTreeModel::AllowNodeReorder);
	model->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility);
	model->setFlag(QgsLayerTreeModel::ShowLegendAsTree);
	model->setAutoCollapseLegendNodes(10);
	m_layerTreeView->setModel(model);
		//连接画布
	m_layerTreeMapCanvasBridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), canvas, this);
		//	右键菜单
	m_layerTreeView->setMenuProvider(new myQgisLayerTreeViewMenuProvider(m_layerTreeView, canvas));
		// DOCK窗口菜单
	ui.dockWidget->setWindowTitle("图层管理");

2.添加右键功能

上面的myQgisLayerTreeViewMenuProvider类,是自定义,并且继承抽象类QgsLayerTreeViewMenuProvider,右键功能实现方式一样,下面是实现“缩放至图层”,QGIS的图层管理自带这些默认的功能,实例化这些功能的方式为

QgsLayerTreeViewDefaultActions *actions = mView->defaultActions();//mView为实例化的QgsLayerTreeView 
    QAction *zoomToLayer_action = actions->actionZoomToLayer(mCanvas, meun);
    zoomToLayer_action->setText("&缩放至图层");
    meun->addAction(zoomToLayer_action); 

 

 

 

  • 17
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值