#include "ManualLabelToolWidget.h" #include #include #include #include ManualLabelToolWidget::ManualLabelToolWidget(QWidget *parent) : QMainWindow(parent) { this->init_UI(); } ManualLabelToolWidget::~ManualLabelToolWidget() { } void ManualLabelToolWidget::init_UI() { // 1. inti map canvas this->map_canvas = new QgsMapCanvas(); this->setCentralWidget((this->map_canvas)); // 2. map tool pan this->map_tool_pan = new QgsMapToolPan(this->map_canvas); this->map_canvas->setMapTool(this->map_tool_pan); // 3. map layer manager this->map_layerTreeView =new QgsLayerTreeView(this); // 4. create map model this->map_layerModel = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this); this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeRename); // 允许重命名 this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // 允许调整顺序 this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // 允许改变可见性 this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // 以树状图显示图例 this->map_layerModel->setAutoCollapseLegendNodes(10); // 自动折叠过多图例项 this->map_layerTreeView->setModel(this->map_layerModel); // create bridge between mapcontrol and layer this->map_layer_Bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), this->map_canvas, this); // layer 布局 // 1. 创建一个QDockWidget(停靠窗口)来承载图层树视图 this->layerTreeDock =new QDockWidget(tr(u8"图层管理器"), this); this->layerTreeDock->setWidget(this->map_layerTreeView); // 2. 将已有的图层树视图(m_layerTreeView)设置为这个停靠窗口的中心部件 layerTreeDock->setWidget(this->map_layerTreeView); // 3. (可选但推荐)设置停靠窗口允许停靠的区域 layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); // 5. 将停靠窗口添加到主窗口的左侧区域 this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock); }