news 2026/9/16 20:46:26

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/9/16 7:45:56

联想拯救者工具箱:解锁笔记本隐藏性能的智能管家

联想拯救者工具箱&#xff1a;解锁笔记本隐藏性能的智能管家 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 还在为官方软件…

作者头像 李华
网站建设 2026/9/15 21:23:20

如何安全使用AO3镜像?新手终极入门指南

如何安全使用AO3镜像&#xff1f;新手终极入门指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 对于初次接触非官方镜像服务的朋友来说&#xff0c;找到可靠的使用方法至关重要。AO3作为全球最大的同人创作平台&am…

作者头像 李华
网站建设 2026/9/15 22:42:48

如何在Win10工控机上完成STLink驱动下载

如何在 Win10 工控机上搞定 STLink 驱动安装&#xff1f;一文讲透全流程 你有没有遇到过这样的场景&#xff1a;手握一块崭新的 STM32 开发板&#xff0c;调试器插上工控机 USB 口&#xff0c;结果设备管理器里却显示“未知设备”&#xff1f;明明是原厂 STLink&#xff0c;为…

作者头像 李华
网站建设 2026/9/15 11:57:32

猫抓浏览器扩展:3步轻松捕获网页视频资源的终极指南

猫抓浏览器扩展&#xff1a;3步轻松捕获网页视频资源的终极指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法保存在线视频而烦恼吗&#xff1f;猫抓Cat-Catch作为一款专业的浏览器资源嗅…

作者头像 李华