Manual-Labeling-Tool/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp

64 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ManualLabelToolWidget.h"
#include <qdockwidget.h>
#include <qgslayertreeview.h>
#include <qgslayertreemodel.h>
#include <qgslayertreemapcanvasbridge.h>
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);
}