news 2026/5/25 16:26:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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二次开发教程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 9:46:08

两条通往AGI的道路:当我们为错误的未来做准备时

两条通往AGI的道路&#xff1a;当我们为错误的未来做准备时想象这样一个场景&#xff1a; 2027年的某个周二早晨&#xff0c;世界并没有因为某个实验室宣布"我们创造了AGI"而改变。相反&#xff0c;一家金融公司突然发现&#xff0c;他们部署的17个专业AI代理——数据…

作者头像 李华
网站建设 2026/5/25 15:02:26

AI取代不了程序员,明年全流程上AI!谷歌工程负责人自曝:2026年AI编程完整工作流!经典软件工程纪律没过时,在AI时代更重要

进入 2026 年&#xff0c;他对 LLM 辅助编程的理解已经非常清晰&#xff1a;它不是“自动驾驶”&#xff0c;而是一位能力极强、但需要被正确引导的结对程序员。Andy系统性复盘了自己在走向 2026 的过程中&#xff0c;如何把 AI 真正纳入日常工程体系——从前期规划&#xff0c…

作者头像 李华
网站建设 2026/5/26 2:04:51

5步掌握资源嗅探工具:新手也能轻松下载全网视频

还在为无法保存网页上的精彩视频而烦恼吗&#xff1f;资源嗅探工具猫抓cat-catch正是你需要的解决方案。作为一款功能强大的浏览器扩展&#xff0c;它能智能识别并提取网页中的各类媒体资源&#xff0c;让你轻松下载想要的内容。 【免费下载链接】cat-catch 猫抓 chrome资源嗅探…

作者头像 李华
网站建设 2026/5/25 12:38:16

CefFlashBrowser:现代浏览器环境下的Flash内容解决方案

在主流浏览器全面淘汰Flash技术的今天&#xff0c;许多基于Flash构建的教育资源、企业应用和经典游戏面临着访问困难。CefFlashBrowser作为专业的Flash兼容解决方案&#xff0c;通过创新的技术架构为传统Flash内容提供了安全可靠的运行环境&#xff0c;让这些数字资源得以延续。…

作者头像 李华
网站建设 2026/5/24 17:53:22

联想拯救者工具箱终极指南:解锁游戏本隐藏性能的完整方案

联想拯救者工具箱终极指南&#xff1a;解锁游戏本隐藏性能的完整方案 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 在游戏…

作者头像 李华
网站建设 2026/5/23 20:14:36

如何快速掌握Alas自动化:碧蓝航线终极托管指南

如何快速掌握Alas自动化&#xff1a;碧蓝航线终极托管指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝航线中…

作者头像 李华