news 2026/4/19 16:49:28

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/4/18 9:34:26

终极音频转换指南:一键解决网易云音乐播放限制

终极音频转换指南&#xff1a;一键解决网易云音乐播放限制 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经为网易云音乐下载的歌曲无法在其他设备播放而烦恼&#xff1f;当你想在车载音响、其他音乐应用或分享给朋友时&am…

作者头像 李华
网站建设 2026/4/17 5:43:48

TranslucentTB源码架构解析:Windows任务栏透明化技术的深度实现

TranslucentTB源码架构解析&#xff1a;Windows任务栏透明化技术的深度实现 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB TranslucentTB作为一款优秀的Windows任务栏透明化工具&#xff0c;其技术实现展现了现代C和Win…

作者头像 李华
网站建设 2026/4/16 23:52:05

数据分析不用愁!这款 AI 神器让科研 / 论文数据处理效率狂飙 10 倍?

“问卷数据堆成山&#xff0c;SPSS 操作半天出不来结果”“回归分析公式记不住&#xff0c;结果解读全靠猜”“数据可视化不规范&#xff0c;论文图表被导师打回重改”…… 在毕业论文写作、科研项目研究、期刊投稿等场景中&#xff0c;数据分析往往是最耗时、最烧脑的环节。传…

作者头像 李华