通过查看qgis源码,发现qgis标识的功能在QgsMapToolSelectionHandler类和QgsMapToolIdentify类中;在选择图形时QgsMapToolSelectionHandler发出geometryChanged信号,然后通过重写的QgsMapToolIdentifyAction类进行接收,从而实现选中图形的高亮和以及数据的显示。
参考这两个类和官方文档,重写了一个选择工具类
.h文件
#include <QObject>
#include <QList>
#include <QScopedPointer>
#include<qmath.h>
#include <qgsmapcanvas.h>
#include <qgsmaptoolidentify.h>
#include <qgsrubberband.h>
#include <qgsmapmouseevent.h>
class QgsMapToolSelectFeatures : public QgsMapToolIdentify
{
Q_OBJECT
public:
QgsMapToolSelectFeatures(QgsMapCanvas *mapCanvas);
protected:
//重写鼠标移动
void canvasMoveEvent(QgsMapMouseEvent *e) override;
//重写鼠标按下
void canvasPressEvent(QgsMapMouseEvent *e) override;
//重写鼠标抬起
void canvasReleaseEvent(QgsMapMouseEvent *e) override;
void initRubberBand();
void identifyFromGeometry();
signals:
//发出选中的要素信号
void sigSelectFeatureChange(QList<QgsFeature>);
private:
// 是否正在选择
bool mSelectionActive = false;
QScopedPointer<QgsRubberBand> mSelectionRubberBand;
QColor mFillColor = QColor(