QGIS为我们提供了默认的图层管理器,我们需要绑定图层树和画布,然后向图层树中添加图层,画布和图层视图都会显示添加的数据。
为此,先删除之前设计界面时添加的 List View,找到frame_prev_layers
删除其中的list_view,并修改其layoutName
为layout_prev_layers
,稍后会向该布局中添加图层视图。
修改init_qgis_map
方法,添加如下代码
def init_qgis_map(main): main.preview_canvas = QgsMapCanvas() main.preview_canvas.setDestinationCrs(QgsCoordinateReferenceSystem("EPSG:4326")) main.preview_canvas.setCanvasColor(Qt.white) main.preview_canvas.enableAntiAliasing(True) main.preview_canvas.setFocus() main.preview_canvas.setParallelRenderingEnabled(True) main.ui.preview_qgis_map.addWidget(main.preview_canvas)
main.preview_tool_pan = QgsMapToolPan(main.preview_canvas) main.preview_tool_zoom_in = QgsMapToolZoom(main.preview_canvas, False) main.preview_tool_zoom_out = QgsMapToolZoom(main.preview_canvas, True) main.preview_canvas.setMapTool(main.preview_tool_pan)
main.layerTreeView = QgsLayerTreeView(main) main.ui.layout_prev_layers.addWidget(main.layerTreeView) main.model = QgsLayerTreeModel(QgsProject.instance().layerTreeRoot(), main) main.model.setFlag(QgsLayerTreeModel.AllowNodeRename) main.model.setFlag(QgsLayerTreeModel.AllowNodeReorder) main.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility) main.model.setFlag(QgsLayerTreeModel.ShowLegendAsTree) main.model.setAutoCollapseLegendNodes(10) main.layerTreeView.setModel(main.model) main.layerTreeBridge = QgsLayerTreeMapCanvasBridge(QgsProject.instance().layerTreeRoot(), main.preview_canvas, main)
|
界面运行效果如下: