Qgis 开发初级 《地图交互》

Qigs 添加数据的方式其实有两种,一种在非编辑模式下,一宗在编辑模式下,编辑模式下的数据操作是可以追溯的,可撤销,可恢复。编辑模式下的数据操作基本都是交互式操作,所以和事件是分不开的。qgis 的有些事件是和图层绑定在一起的,前面说过,qgis有当前图层的概念,qgis的内部事件的操作逻辑也是和当前图层绑定在一起的。所以,如果我们写自己的事件的话,为了避免和qgis的事件有冲突,通常要去掉qigs的事件,我们是二次开发,原则上不动qgis的源码,所以会去除当前图层,具体如何操作,后面会介绍。

1、事件

1.1、Tool 工具

无论是arcgis 还是qgis 都有tool的概念,简单来说,就是一种和地图交互的类。事件也是和这些Tool息息相关的。先看下Qgis里面内置的一些重要的Tools类。接下来,我们主要以 QgsMapToolEdit(地图编辑类)和QgsMapToolIdentify(地图拾取类) 两个主要类介绍事件。

当我们要自定义一个工具的时候,一般这样写,下面是一个继承了QgsMapToolIdentify基类的类。其中覆写了五个事件,依次为键盘按下事件,键盘抬起事件,鼠标按下事件,鼠标抬起事件和鼠标移动事件。

class BTool : public QgsMapToolIdentify
public:
	BTool(QgsMapCanvas* pMapCanvas);
	~BTool();

protected:
	void keyPressEvent(QKeyEvent* e) override;
	void keyReleaseEvent(QKeyEvent* e) override;
    void canvasPressEvent(QgsMapMouseEvent* e) override;
    void canvasReleaseEvent(QgsMapMouseEvent* e) override;
	void canvasMoveEvent(QgsMapMouseEvent* e) override;
	
};

其中在键盘事件中,可通过下面方法判断是按下了哪个键,qgis里面是有按键的枚举值的,我一般是通过这种数字去判断。27 表示按下的是ESC 的键。

e->nativeVirtualKey() == 27

在鼠标事件中,可通过下面方法判断是左键,还是右键,下面的代码表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千银

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值