当前位置: 首页 > news >正文

QGIS二次开发识别不出来要素问题

代码这样写是识别不出来的

QList<QgsMapToolIdentify::IdentifyResult>identifyRes=identify(e->pos().x(),e->pos().y());

这样写是可以的

QList<QgsMapToolIdentify::IdentifyResult>identifyRes=identify(e->pos().x(),e->pos().y(),canvas()->layers());

区别就在于,最后是否传入要识别的图层列表,但是看API我们会发现,当图层列表不传入的时候,默认是所有图层,这意味着第一种写法也应该可以出来,问题出在哪里呢?翻看源码,看到这样一段

elseif(mode==ActiveLayer&&layerList.isEmpty()){QgsMapLayer*layer=mCanvas->currentLayer();if(!layer){emitidentifyMessage(tr("No active layer. To identify features, you must choose an active layer."));returnresults;}if(!layer->flags().testFlag(QgsMapLayer::Identifiable))returnresults;QApplication::setOverrideCursor(Qt::WaitCursor);identifyLayer(&results,layer,mLastGeometry,mLastExtent,mLastMapUnitsPerPixel,layerType,identifyContext);}

这段的意思是,当采用的识别模式是ActiveLayer并且图层列表为空时进入这个判断,这正好符合图层列表为空,那识别模式呢,应该是默认的DefaultQgsSetting才对啊,原来,这是QGIS写到注册表里的识别模式,意思是具体的识别模式要通过这个键来读取,再往上翻代码,发现了这个识别模式是这样读取的

if(mode==DefaultQgsSetting){QgsSettings settings;mode=settings.enumValue(QStringLiteral("Map/identifyMode"),ActiveLayer);}

当获取不到识别模式(可能是没有设置)时,默认就是ActiveLayer ,打印一下看是不是

qDebug()<<settings.enumValue(QStringLiteral("Map/identifyMode"),ActiveLayer);输出:QgsMapToolIdentify::ActiveLayer

果然是,进入到里面之后,由于没有为画布设置currentLayer,导致获取到的layer为空,于是不再往下执行,最后识别的列表就是空啦。所以只要设置识别模式就行,如下代码是可以正常工作的

QList<QgsMapToolIdentify::IdentifyResult>identifyRes=identify(e->pos().x(),e->pos().y(),QList<QgsMapLayer*>(),TopDownAll);

最后,在附上最近一直在更新的QGIS二次开发教程

http://www.jsqmd.com/news/124023/

相关文章:

  • ncmdump:终极音乐格式转换工具,轻松解锁加密音频
  • 【Android】常见的架构模式:MVC, MCP, MVVM - 指南
  • Google Drive文件下载高效方法:Python脚本一键搞定
  • 如何快速提升网课效率:WELearn助手终极免费指南
  • 联想拯救者工具箱:解锁笔记本隐藏性能的智能管家
  • 【Open-AutoGLM开源实战手册】:掌握这7个关键步骤,快速构建专属GLM模型
  • Bypass Paywalls Clean完整使用教程:轻松解锁150+新闻网站付费内容
  • ESP32引脚控制继电器实践:项目应用案例
  • NCM格式音乐文件解密转换全攻略
  • 手慢无!Open-AutoGLM最新邀请码获取路径,速领仅剩名额
  • 【终极盘点】颗粒图像分析仪主流品牌推荐:选哪个品牌不踩坑? - 品牌推荐大师1
  • 5分钟掌握浏览器媒体探测神器:告别网页视频下载难题
  • 2025年知名的管网铺设水泥管最新TOP品牌厂家排行 - 品牌宣传支持者
  • MySQL学习笔记
  • HID示例项目解析:自制简易自定义设备教程
  • Chrome付费墙绕过工具终极指南:简单5步解锁全网付费内容
  • 终极指南:如何快速配置Bypass Paywalls Clean解锁数字内容
  • P13011 【MX-X13-T6】「KDOI-12」能做到的也只不过是静等缘分耗尽的那一天。
  • 2025年煤质活性炭制造企业权威推荐榜单:椰壳活性炭/固体聚合氯化铝/聚合氯化铝絮凝剂源头厂家精选 - 品牌推荐官
  • 数字音乐格式转换完整指南:突破加密限制实现跨平台播放
  • 如何快速掌握Alas自动化:碧蓝航线终极托管指南
  • Bypass Paywalls Clean终极指南:一键解锁付费内容的完整教程
  • Bypass Paywalls Clean:突破付费墙的完整解决方案
  • ncmdump终极教程:5分钟搞定NCM到MP3的完美转换
  • NCM格式转换完整教程:3步解锁网易云音乐加密文件
  • 一文说清I2C作为HID传输通道的技术优势与限制
  • RePKG工具全面解析:轻松解锁Wallpaper Engine壁纸资源
  • 基于MATLAB进行模型仿真与设备剩余寿命预测
  • 终极懒人神器:Alas碧蓝航线24小时全自动托管系统
  • 2025自动化运维厂商深度盘点:如何选择最适合您的企业伙伴?