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

473 lines
14 KiB
C++
Raw Normal View History

2025-11-20 09:32:46 +00:00
#include "ManualLabelToolWidget.h"
#include <qdockwidget.h>
#include <qgslayertreeview.h>
#include <qgslayertreemodel.h>
#include <qgslayertreemapcanvasbridge.h>
#include <qlabel.h>
#include <qstatusbar.h>
#include <QMenuBar>
#include <QToolBar>
#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsmaptoolpan.h>
#include <qgsunittypes.h>
#include <QString>
#include <qgis.h>
#include <QgsMapSettings.h>
#include <QFile>
#include <QFileDialog>
#include <QDialog>
#include <QApplication>
#include <QScreen>
#include <QString>
#include <qfileinfo.h>
#include <qdir.h>
#include <qgsmaplayer.h>
#include <qgsproject.h>
#include "WidgetSettingClass.h"
#include "LAMPDataManagerDialog.h"
#include <qgsproviderregistry.h>
#include <qgsapplication.h>
//#include <qgslayertreeview.h>
#include <qgslayertree.h>
#include <qgslayerpropertiesdialog.h>
#include "QBatchStaticEchoDialog.h"
#include "QImageCursorWidget.h"
#include <QToolButton.h>
#include <QgsMapToolZoom.h>
#include <QgsMapToolIdentify.h>
#include "CustomCursorTool.h"
#include "qgslayerpropertiesdialog.h"
#include "windLayerTreeViewMenuProvider.h"
//QgsUnitTypes
ManualLabelToolWidget::ManualLabelToolWidget(QWidget* parent)
: QMainWindow(parent)
{
this->init_UI();
}
ManualLabelToolWidget::~ManualLabelToolWidget()
{
}
void ManualLabelToolWidget::init_UI()
{
// <20><>ʼ<EFBFBD><CABC>С
{
this->setWindowTitle(tr(u8"΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ļ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣨲<EFBFBD><F2A3A8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QRect availableGeometry = QApplication::primaryScreen()->availableGeometry();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80%
int width = availableGeometry.width() * 0.8;
int height = availableGeometry.height() * 0.8;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>С
resize(width, height);
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
move(availableGeometry.center() - rect().center());
}
{
datamanagerDialog = new LampDataManager(this);
onshowDatamanagerActionTriggered();
}
//<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
{
// 1. inti map canvas
this->map_canvas = new QgsMapCanvas(this);
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);
// <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
map_canvas->setCachingEnabled(true); // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><E6A3AC><EFBFBD><EFBFBD>ʵ<EFBFBD>ַֿ<D6B7><D6BF><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>Ĺؼ<C4B9>[citation:6][citation:8]
map_canvas->setParallelRenderingEnabled(true); // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[citation:6]
// 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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ɼ<EFBFBD><C9BC><EFBFBD>
this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // <20><><EFBFBD><EFBFBD>״ͼ<D7B4><CDBC>ʾͼ<CABE><CDBC>
this->map_layerModel->setAutoCollapseLegendNodes(10); // <20>Զ<EFBFBD><D4B6>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
this->map_layerTreeView->setModel(this->map_layerModel);
this->map_layer_Bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), this->map_canvas, this);
this->layerTreeDock = new QDockWidget(tr(u8"ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), this);
this->layerTreeDock->setWidget(this->map_layerTreeView);
layerTreeDock->setWidget(this->map_layerTreeView);
layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock);
windLayerTreeViewMenuProvider* mLayerTreeViewMenuProvider = new windLayerTreeViewMenuProvider(map_layerTreeView, map_canvas, this);
this->map_layerTreeView->setMenuProvider(mLayerTreeViewMenuProvider);
}
// ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
appStatusBar = this->statusBar(); // <20><>ȡ<EFBFBD>򴴽<EFBFBD>״̬<D7B4><CCAC>
scaleLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>"));
CoordinaryTextLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>"));
PointXYLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD>"));
UnitLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>"));
appStatusBar->addPermanentWidget(PointXYLabel); //
appStatusBar->addPermanentWidget(scaleLabel); //
appStatusBar->addPermanentWidget(UnitLabel); //
appStatusBar->addPermanentWidget(CoordinaryTextLabel); //
// <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>߱仯<DFB1>ź<EFBFBD>
connect(map_canvas, SIGNAL(scaleChanged(double)), this, SLOT(updateScaleLabel(double)));
connect(map_canvas, SIGNAL(xyCoordinates(const QgsPointXY&)), this, SLOT(updateCoordinateLabel(const QgsPointXY&)));
connect(map_canvas, SIGNAL(extentsChanged()), this, SLOT(onMapExtentsChanged()));
}
// <20>˵<EFBFBD><CBB5><EFBFBD>
{
menubar = this->menuBar();
// <20>ڲ˵<DAB2><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>ļ<EFBFBD>"<22><>"<22>༭"<22>˵<EFBFBD>
fileMenu = menubar->addMenu(tr(u8"<EFBFBD>ļ<EFBFBD>"));
// <20><>"<22>ļ<EFBFBD>"<22>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ˵<D3B2><CBB5>QAction<6F><6E>
newAction = fileMenu->addAction(tr(u8"<EFBFBD>½<EFBFBD>"));
fileMenu->addSeparator(); // <20><><EFBFBD>ӷָ<D3B7><D6B8><EFBFBD>[1,5](@ref)
openMenu = fileMenu->addMenu(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
openRasterFolderAction = openMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
openRasterAction = openMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"));
openSLCRasterAction = openMenu->addAction(tr(u8"SLCӰ<EFBFBD><EFBFBD>"));
openLampWindDataAction = openMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
QObject::connect(this->openRasterAction, SIGNAL(triggered()), this, SLOT(openRaster()));
QObject::connect(this->openLampWindDataAction, SIGNAL(triggered()), this->datamanagerDialog, SLOT(openLampWindDataFile()));
editMenu = menubar->addMenu(tr(u8"<EFBFBD>"));
SARWindInversionMenu = menubar->addMenu(tr(u8"SAR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
SARImageImportAction = SARWindInversionMenu->addAction(tr(u8"SAR<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD>"));
SARInversionAtion = SARWindInversionMenu->addAction(tr(u8"SAR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
SARInversionResulutShowAtion = SARWindInversionMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>չʾ"));
//SARWindAysysMenu = SARWindInversionMenu->addMenu(tr(u8"<22><EFBFBD><E7B3A1><EFBFBD><EFBFBD>"));
//SARImageAysysAction = SARWindAysysMenu->addAction(tr(u8"Ŀ<><C4BF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD>"));
QObject::connect(SARInversionAtion, SIGNAL(triggered()), this, SLOT(onshowSARInversionAtionTriggered()));
}
// ͼ<>񹤾<EFBFBD>
{
datatoolbar = new QToolBar(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
showDatamanagerAction = datatoolbar->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD>"));
mapToolActionGroup = new QActionGroup(this);
ZoomInToolbtn = new QAction(tr(u8"<EFBFBD>Ŵ<EFBFBD>"));
ZoomInToolbtn->setCheckable(true);
mapToolActionGroup->addAction(ZoomInToolbtn);
ZoomOutToolbtn = new QAction(tr(u8"<EFBFBD><EFBFBD>С"));
ZoomOutToolbtn->setCheckable(true);
mapToolActionGroup->addAction(ZoomOutToolbtn);
MapPanToolbtn = new QAction(tr(u8"ƽ<EFBFBD><EFBFBD>"));
MapPanToolbtn->setCheckable(true);
MapPanToolbtn->setChecked(true);
mapToolActionGroup->addAction(MapPanToolbtn);
IdentifyToolbtn = new QAction(tr(u8"ʶ<EFBFBD><EFBFBD>"));
IdentifyToolbtn->setCheckable(true);
mapToolActionGroup->addAction(IdentifyToolbtn);
cursorAction = new QAction(tr(u8"<EFBFBD>α<EFBFBD>"));
cursorAction->setCheckable(true);
mapToolActionGroup->addAction(cursorAction);
datatoolbar->addAction(ZoomInToolbtn);
datatoolbar->addAction(ZoomOutToolbtn);
datatoolbar->addAction(MapPanToolbtn);
datatoolbar->addAction(cursorAction);
m_mapToolPan = new QgsMapToolPan(this->map_canvas);
m_mapToolZoomIn = new QgsMapToolZoom(this->map_canvas, false);
m_mapToolZoomOut = new QgsMapToolZoom(this->map_canvas, true);
m_mapIdentifyToolPan = new QgsMapToolIdentify(this->map_canvas);
m_CustomCursorTool = new CustomCursorTool(this->map_canvas);
ZoomInToolbtn->setText(u8"<EFBFBD>Ŵ<EFBFBD>");
ZoomOutToolbtn->setText(u8"<EFBFBD><EFBFBD>С");
MapPanToolbtn->setText(u8"ƽ<EFBFBD><EFBFBD>");
IdentifyToolbtn->setText(u8"ʶ<EFBFBD><EFBFBD>");
connect(mapToolActionGroup, &QActionGroup::triggered, this, &ManualLabelToolWidget::onMapToolActionTriggered);
//QObject::connect(cursorAction, SIGNAL(triggered()), this, SLOT(onCursorImageToolTriggered()));
QObject::connect(showDatamanagerAction, SIGNAL(triggered()), this, SLOT(onshowDatamanagerActionTriggered()));
this->addToolBar(Qt::TopToolBarArea, datatoolbar);
}
// AI<41><49>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
AiLabelToolBar = new QToolBar(tr(u8"AI<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), this);
this->addToolBar(Qt::LeftToolBarArea, AiLabelToolBar);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
QString qgisPrefixPath = WidgetSettingClass::instance().getExeDirectionApplicationPath();
// 3. <20><>ʽ<EFBFBD><CABD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>Ŀ¼<C4BF><C2BC>ȷ<EFBFBD><C8B7>QGIS<49><53><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>̬<EFBFBD><EFBFBD><E1B9A9>
QString pluginPath = qgisPrefixPath + "/plugins";
QgsApplication::setPluginPath(pluginPath);
// 4. <20><><EFBFBD><EFBFBD>QGIS<49>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>proj.db<64>ȣ<EFBFBD>
QString pkgDataPath = qgisPrefixPath + "/share/qgis";
QgsApplication::setPkgDataPath(pkgDataPath);
QgsApplication::initQgis();
QStringList providers = QgsProviderRegistry::instance()->providerList();
qDebug() << u8"<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:" << providers;
// <20><><EFBFBD><EFBFBD> "mesh_memory" <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> "mdal" <20><EFBFBD><E1B9A9><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if (providers.contains("mesh_memory")) {
qDebug() << u8"'mesh_memory' <20><EFBFBD>߿<EFBFBD><DFBF>á<EFBFBD>";
}
else {
qDebug() << u8"<EFBFBD><EFBFBD><EFBFBD>棺δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>";
}
if (providers.contains("mdal")) {
qDebug() << u8"'mdal' <20><EFBFBD>߿<EFBFBD><DFBF>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܰ<EFBFBD><DCB0><EFBFBD><EFBFBD><EFBFBD> 'mdal' <20>С<EFBFBD>";
}
else {
qDebug() << u8"<EFBFBD><EFBFBD><EFBFBD>棺δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>";
}
}
}
void ManualLabelToolWidget::open()
{
}
void ManualLabelToolWidget::openRaster()
{
QString lastFileDialogPath = WidgetSettingClass::instance().getLastFileDialogPath();
if (lastFileDialogPath.isEmpty()) {
lastFileDialogPath = ".";
}
// <20><><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
// 2. ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
QString lampwindPath = QFileDialog::getOpenFileName(
this,
tr(u8"<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"),
lastFileDialogPath,
tr(LAMPWINDDATAFILEFILTER)
);
QString filename = QFileInfo(lampwindPath).fileName();
QgsRasterLayer* rasterLayer = new QgsRasterLayer(lampwindPath, filename);
if (!rasterLayer->isValid()) {
qDebug() << "Failed to load raster layer!";
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
this->AddLayers(rasterLayer);
}
void ManualLabelToolWidget::updateCoordinateLabel(const QgsPointXY& point)
{
QString coordText = QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD>꣺X:%1 Y:%2")).arg(QString::number(point.x(), 'f', 2)).arg(QString::number(point.y(), 'f', 2));
PointXYLabel->setText(coordText);
}
void ManualLabelToolWidget::onMapExtentsChanged()
{
QgsRectangle currentExtent = map_canvas->extent();
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>Ϣ<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>
//// 1. <20><>ӡ<EFBFBD><D3A1>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
//qDebug() << "<22>·<EFBFBD>Χ - Xmin:" << currentExtent.xMinimum()
// << "Ymin:" << currentExtent.yMinimum()
// << "Xmax:" << currentExtent.xMaximum()
// << "Ymax:" << currentExtent.yMaximum();
}
void ManualLabelToolWidget::AddLayers(QgsMapLayer* layer)
{
if (!layer || !layer->isValid()) {
qDebug() << "<EFBFBD><EFBFBD>Чͼ<EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>";
return;
}
if (QgsProject::instance()->mapLayers().size() == 0) {
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>ӵ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
if (layer && layer->isValid() && layer->crs().isValid()) {
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͼ<EFBFBD><CDBC>һ<EFBFBD><D2BB>
map_canvas->mapSettings().setDestinationCrs(layer->crs());
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><E1B9A9><EFBFBD>õij<C3B5>ʼ<EFBFBD><CABC>ͼ
map_canvas->setExtent(layer->extent());
// ˢ<>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
map_canvas->refresh();
qDebug() << "ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << layer->crs().description();
}
}
QgsProject::instance()->addMapLayer(layer);
}
void ManualLabelToolWidget::updateScaleLabel(double scale)
{
QString scaleText = QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>1:%1")).arg(QString::number(scale, 'f', 0));
scaleLabel->setText(scaleText);
Qgis::DistanceUnit unit = map_canvas->mapUnits();
QString unitString;
if (unit == Qgis::DistanceUnit::Meters) {
unitString = tr(u8"<EFBFBD><EFBFBD>");
}
else if (unit == Qgis::DistanceUnit::Degrees) {
unitString = tr(u8"<EFBFBD><EFBFBD>");
}
else if (unit == Qgis::DistanceUnit::Feet) {
unitString = tr(u8"Ӣ<EFBFBD><EFBFBD>");
}
else {
unitString = tr(u8"δ֪");
}
UnitLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>%1")).arg(unitString));
QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
QString description = currentCrs.description();
QString authid = currentCrs.authid();
if (description == "") {
CoordinaryTextLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>δ֪")));
}
else {
CoordinaryTextLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>%1")).arg(description));
}
}
void ManualLabelToolWidget::onshowDatamanagerActionTriggered()
{
if (nullptr == datamanagerDialog) {
datamanagerDialog = new LampDataManager(this);
}
else {}
QRect parentGeometry = this->geometry();
QSize dialogSize = datamanagerDialog->size();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int x = parentGeometry.x() + (parentGeometry.width() - dialogSize.width()) / 2;
int y = parentGeometry.y() + (parentGeometry.height() - dialogSize.height()) / 2;
// <20><><EFBFBD>öԻ<C3B6><D4BB><EFBFBD>λ<EFBFBD><CEBB>
datamanagerDialog->move(x, y);
datamanagerDialog->show();
datamanagerDialog->raise(); // ȷ<><C8B7><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
datamanagerDialog->activateWindow(); // <20><><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
}
void ManualLabelToolWidget::setupLayerTreeContextMenu()
{
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ˵<C4B2>
this->map_layerTreeView->setMenuProvider(this->map_layerTreeView->menuProvider());
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>˵<EFBFBD>
this->map_layerTreeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(this->map_layerTreeView, &QgsLayerTreeView::customContextMenuRequested,
this, &ManualLabelToolWidget::onLayerTreeContextMenu);
}
void ManualLabelToolWidget::onLayerTreeContextMenu(const QPoint& pos)
{
QModelIndex index = map_layerTreeView->indexAt(pos);
if (!index.isValid())
return;
QgsLayerTreeNode* node = map_layerTreeView->layerTreeModel()->index2node(index);
if (!node)
return;
QMenu* menu = new QMenu(this);
if (QgsLayerTree::isLayer(node))
{
QgsMapLayer* layer = QgsLayerTree::toLayer(node)->layer();
if (layer)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>˵<EFBFBD><CBB5><EFBFBD>
QAction* attributeTableAction = menu->addAction(tr("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>"));
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Բ˵<D4B2><CBB5><EFBFBD>
QAction* layerPropertiesAction = menu->addAction(tr("ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
}
menu->exec(map_layerTreeView->mapToGlobal(pos));
delete menu;
}
void ManualLabelToolWidget::onshowSARInversionAtionTriggered()
{
QBatchStaticEchoDialog* d = new QBatchStaticEchoDialog(this);
d->show();
}
void ManualLabelToolWidget::onMapToolActionTriggered(QAction* action)
{
if (action == ZoomInToolbtn) {
this->map_canvas->setMapTool(m_mapToolZoomIn);
}
else if (action == ZoomOutToolbtn) {
this->map_canvas->setMapTool(m_mapToolZoomOut);
}
else if (action == MapPanToolbtn) {
this->map_canvas->setMapTool(m_mapToolPan);
}
else if (action == IdentifyToolbtn) {
this->map_canvas->setMapTool(m_mapIdentifyToolPan);
}
else if (action == cursorAction) {
this->map_canvas->setMapTool(m_CustomCursorTool);
if (!cursorInfoDialog)
{
cursorInfoDialog = new QImageCursorWidget(this); // <20>α<EFBFBD><CEB1><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
}
QObject::connect(m_CustomCursorTool, &CustomCursorTool::identifyResultChange, cursorInfoDialog, &QImageCursorWidget::showCursor, Qt::ConnectionType::AutoConnection);
cursorInfoDialog->show();
map_canvas->setCursor(Qt::CrossCursor);
}
else {
map_canvas->setCursor(Qt::CursorShape::ArrowCursor);
}
}