news 2026/6/3 11:13:11

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/6/2 16:08:22

音频格式转换工具使用指南:3种方法轻松解密NCM音乐文件

音频格式转换工具使用指南&#xff1a;3种方法轻松解密NCM音乐文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是不是曾经在网易云音乐下载了心爱的歌曲&#xff0c;却发现只能在特定的播放器上播放&#xff1f;别担心&#x…

作者头像 李华
网站建设 2026/5/30 5:07:56

如何三步快速配置联想拯救者工具箱:游戏本性能调优完整指南

还在为官方软件卡顿、功能冗余而烦恼吗&#xff1f;联想拯救者工具箱作为一款轻量级替代方案&#xff0c;正以极简设计和深度定制能力重新定义游戏本性能体验。无论你是追求极致帧率的游戏玩家&#xff0c;还是注重稳定输出的内容创作者&#xff0c;这款开源工具都能帮你发挥设…

作者头像 李华
网站建设 2026/5/31 3:42:07

3个技巧轻松突破付费墙:Bypass Paywalls Clean实战指南

3个技巧轻松突破付费墙&#xff1a;Bypass Paywalls Clean实战指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息时代&#xff0c;你是否经常遇到这样的情况&#xff1a;点击…

作者头像 李华
网站建设 2026/5/28 5:02:12

虎贲等考 AI:重新定义学术写作,全流程智能赋能科研创作

在学术探索与论文写作的道路上&#xff0c;你是否曾为选题迷茫、文献繁杂而手足无措&#xff1f;是否因数据处理繁琐、图表规范难控而耗费大量精力&#xff1f;是否担心查重超标、AI 生成痕迹明显而影响学术成果认可度&#xff1f;虎贲等考 AI&#xff08;官网&#xff1a;http…

作者头像 李华