news 2026/6/9 18:48:16

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/9 3:57:57

Bypass Paywalls Clean终极指南:免费解锁付费内容的完整教程

Bypass Paywalls Clean终极指南&#xff1a;免费解锁付费内容的完整教程 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的时代&#xff0c;你是否经常遇到想要阅读的文章被…

作者头像 李华
网站建设 2026/6/8 21:21:00

3分钟精通窗口置顶:多任务效率翻倍的终极指南

3分钟精通窗口置顶&#xff1a;多任务效率翻倍的终极指南 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 还在为频繁切换窗口打断工作节奏而困扰吗&#xff1f;窗口置顶工具让你…

作者头像 李华
网站建设 2026/6/9 10:27:25

ncmdump:三步解锁加密音乐,让下载的歌曲真正属于你

ncmdump&#xff1a;三步解锁加密音乐&#xff0c;让下载的歌曲真正属于你 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为音乐平台下载的加密音频而烦恼吗&#xff1f;ncmdump这款专业解密工具能够完美解决NCM格式限制&#…

作者头像 李华
网站建设 2026/6/8 21:30:31

VIENNA整流器仿真模型:零序注入SVPWM调制与中点电位平衡探秘

VIENNA整流器仿真模型&#xff0c;采用零序注入SVPWM的调制方式&#xff0c;中点点位平衡。 电网电压电流同相位&#xff0c;THD含量低于5&#xff05;。在电力电子领域&#xff0c;VIENNA整流器凭借其独特优势备受关注。今天咱们就来聊聊基于零序注入SVPWM调制方式且能实现中点…

作者头像 李华
网站建设 2026/6/9 6:00:23

终极指南:如何用轻量级工具完全掌控联想笔记本性能

终极指南&#xff1a;如何用轻量级工具完全掌控联想笔记本性能 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 还在为联想官…

作者头像 李华