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

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<QgsVectorLayer*>(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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值