图层显示控制是gis中比较普通的功能,一般是作为图层的一个办法实现,但在qgis中就没这么简单,至少我在QgsMapLayer类中没发现。
在QGIS通过QgsLayerTreeView的setLayerVisible可以实现显示控制,通过实现源码可以看出其实是通过图层树checkbox的控制实现的,感觉真的有点low。实现源码如下:
void QgsLayerTreeView::setLayerVisible( QgsMapLayer *layer, bool visible )
{
if ( !layer )
return;
QgsLayerTreeLayer *nodeLayer = layerTreeModel()->rootGroup()->findLayer( layer->id() );
if ( !nodeLayer )
return;
nodeLayer->setItemVisibilityChecked( visible );
}
思路:
1、实例化QgsLayerTreeView,并作为成员变量
2、调用QgsLayerTreeView的setLayerVisible
具体看代码
mLayerTree = new QgsLayerTreeView(nullptr); //实例化的QgsLayerTreeView
mLayerTree->setObjectName(QStringLiteral("LayerControl"));
//创建QgsLayerTreeModel 实例,并允许用户通过点选复选框手动隐藏/显示图层
QgsLayerTreeModel* model = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this);
model->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility);
model->setAutoCollapseLegendNodes(10);
//将View视图与Model数据绑定
mLayerTree->setModel(model);
//将工程实例中的图层根节点与画布绑定,实现与地图画布控件的数据交互
mLayerTreeBridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), mMapCanvas, this);