最近因为项目需要,用QGIS二次开发做一个矢量图层的属性识别窗口,最终是仿照QGIS的属性识别框。在这里记录一下过程防止遗忘。
先看一下需要用到的类
QgsMapToolIdentify:图层特征识别工具,矢量层显示搜索半径内的特性属性(允许编辑矢量层处于编辑模式时的值),这个类就是我们要用的类
这个类重写了鼠标事件:
我们发现他并没有实现,所以我们接下来就是要自己写一个类重新实现鼠标事件
这个类继承了QgsMapToolIdentify,重新实现鼠标事件
qgisgeometry就是鼠标点击的一个区域
我们在看QgsMapToolIdentify中一个重要函数
这个函数就是我们要将鼠标点击的区域传进去,他会返回一个QLIST的容器我们识别的结果都放在里面
这里就将识别结果都保存在了results中,我们来看一下identifyresult的结构
我这里重新写了一个界面显示类,把结构体的值传过来
resultsdialog是界面类的对象
接下来我们就可以取值显示自己需要显示的内容
比如 vlayer->name()是图层名字
f.id()是弧段编号
f.attributes()是弧段名字
具体的大家可以去QgsFeature的源码去找自己需要的显示出来;
这里还要说一下QMap<QString, QString>& derivedAttributes它保存了各种衍生信息类似于QGISApp的属性显示框
我这里用qdebug打印了一下大家可以根据需要自己设计ui显示
打印结果如下
最后想说一下第一次写可能有错误和不清楚的地方,请大家原谅,也希望大家留言交流。