1.简介
QgsMapTool地图工具是用于操作地图画布的用户交互式工具。例如,地图平移和缩放功能被实现为地图工具。
QgsMapTool是抽象基类,以下是类的继承关系:
- QgsMapToolEdit:用于编辑矢量几何图形的映射工具的基类
- QgsMapToolEmitPoint:一个地图工具,当单击地图时,它只是发出一个点。
将一个槽连接到它的canvasClicked()信号将允许您为传入点实现自定义行为。 - QgsMapToolExtent:地图画布上绘制矩形发出一个范围。
- QgsMapToolIdentify :用于识别图层特征的映射工具。
- QgsMapToolPan:用于平移地图的地图工具。
- QgsMapToolZoom :用于放大/缩小地图的地图工具。
2.常用接口
virtual void canvasDoubleClickEvent (QgsMapMouseEvent *e) | 重写鼠标双击事件 |
virtual void canvasMoveEvent (QgsMapMouseEvent *e) | 重写鼠标移动事件 |
virtual void canvasPressEvent (QgsMapMouseEvent *e) | 重写鼠标按下事件 |
virtual void canvasReleaseEvent (QgsMapMouseEvent *e) | 重写鼠标抬起事件 |
virtual void setCursor (const QCursor &cursor) | 设置光标 |
QgsPointXY toMapCoordinates (QPoint point) | 将点从屏幕坐标转换为地图坐标。 |
3.示例
示例1:画布移动、放大、缩小
源码:
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_GisCtrl.h"
#include <QDebug>
#include <QFileInfo>
#include <qgsmaptoolpan.h>
#include <qgsrasterlayer.h>
#include <qgsmapcanvas.h>
#include <qgspoint.h>
#include <QMouseEvent>
#include <qgsmaptoolzoom.h>
#include <QActionGroup>
class GisCtrl : public QMainWindow
{
Q_OBJECT
public:
GisCtrl(QWidget *parent = Q_NULLPTR);
private:
Ui::GisCtrlClass ui;
private slots:
void slotXyCoordinates(const QgsPointXY &p);
void slotMove();
void slotZoomIn();
void slotZoomOut();
private:
QgsMapCanvas *m_mapCanvas = nullptr;
QList<QgsMapLayer *> m_layers;
QgsMapToolPan *m_toolPan = nullptr; // 新建移动工具
QgsMapToolZoom *m_toolZoomIn = nullptr;//放大
QgsMapToolZoom *m_toolZoomOut = nullptr;//缩小
QActionGroup *m_actionGroup = nullptr;
};
#include "GisCtrl.h"
#include <qgsrasterlayer.h>
#include <qgsrubberband.h>
#pragma execution_character_set("utf-8")
GisCtrl::GisCtrl(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//创建画布
m_mapCanvas = new QgsMapCanvas(this);
QString url =