永发信息网

如何修改qgsMapCanvas.cpp使其隐藏想要的图层

答案:1  悬赏:80  手机版
解决时间 2021-11-13 08:09
  • 提问者网友:喧嚣尘世
  • 2021-11-12 22:40
如何修改qgsMapCanvas.cpp使其隐藏想要的图层
最佳答案
  • 五星知识达人网友:举杯邀酒敬孤独
  • 2021-11-13 00:10
1:在qgsmapcanvas.cpp中定义一个全局字符串变量,QString g_sNeedLayerID="";//需要隐藏的图层id
2:找到refreshMap()函数;
3:添加如下代码:
Q_ASSERT( mRefreshScheduled );
QgsDebugMsg( "CANVAS refresh!" );
stopRendering(); // if any...
// from now on we can accept refresh requests again
mRefreshScheduled = false;
//update $map variable to canvas
QgsExpression::setSpecialColumn("$map", tr("canvas"));
// create the renderer job
Q_ASSERT( mJob ==0);
mJobCancelled = false;
QStringList layerList;
if (m_Settings_back.layers().count()==0)
{
m_Settings_back=m_Settings;
}
foreach (QString id, m_Settings_back.layers())
{
if (id!=g_sNeedLayerID)
{
layerList.push_back(id);
}
}
m_Settings.setLayers(layerList);
mJob = new QgsMapRendererSequentialJob(m_Settings);
connect(mJob, SIGNAL(finished()), SLOT( rendererJobFinished()));
mJob->setCache( mCache );
QStringList layersForGeometryCache;
foreach (QString id, m_Settings.layers())
{
if (QgsVectorLayer* vl= qobject_cast(QgsMapLayerRegistry::instance()->mapLayer(id)))
{
if (vl->isEditable() )//&& id!=m_sLayerID)
layersForGeometryCache << id;
}
}
mJob->setRequestedGeometryCacheForLayers(layersForGeometryCache);
mJob->start();
emit renderStarting();
4:在其他想隐藏的代码里:
extern QString
g_sNeedLayerID; //需要隐藏的图层id
g_sNeedLayerID=m_pPolylineLayer->id();
m_pMapCanvas->refresh();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯