diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index ff1b138..df935e1 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -11,6 +11,7 @@ #include "MapTool.h" #include "MapToolPan.h" #include "MapToolSpectral.h" +#include "MapTools.h" HPPA* HPPA::s_instance = nullptr; @@ -89,8 +90,6 @@ HPPA::HPPA(QWidget* parent) ui.splitter->setStretchFactor(1, 1); ui.splitter->setStretchFactor(2, 3);*/ - - initMenubarToolbar(); initMapTools(); //光谱仪操作 @@ -242,7 +241,6 @@ sizePolicy1.setHeightForWidth(graphicsView_delete->sizePolicy().hasHeightForWidt auto* g2 = m_LayerTreeModel->addGroup(m_LayerTreeModel->root(), "Vector"); //model->addLayer(g2, "Rivers"); - m_layerTreeView = new LayerTreeView(); m_layerTreeView->setMenuProvider(new LayerTreeViewMenuProvider(m_layerTreeView)); m_layerTreeView->setModel(m_LayerTreeModel); @@ -677,7 +675,7 @@ void HPPA::initMenubarToolbar() ui.action_auto_exposure->setIcon(QIcon(".//icon//all//exposure.png")); ui.action_focus->setIcon(QIcon(".//icon//all//focus.png")); ui.action_dark->setIcon(QIcon(".//icon//all//dark.png")); - ui.action_reference->setIcon(QIcon(".//icon//all//reference.png")); + ui.action_reference->setIcon(QIcon(".//icon//all//reference.png")); // 使用样式表设置透明背景 toolBar->setStyleSheet(R"( QToolBar { @@ -1009,15 +1007,15 @@ void HPPA::initPanelToolbar() void HPPA::initMapTools() { - // Make the actions checkable ui.mActionPan->setCheckable(true); ui.mActionSpectral->setCheckable(true); - // Create tools (canvas will be set per-tab, tools are re-applied on tab switch) - // We don't create per-canvas tools here; instead we create shared tool instances - // and re-apply them when the tab changes. - m_mapToolPan = nullptr; - m_mapToolSpectral = nullptr; + m_mapTools = new MapTools(this); + m_mapTools->mapToolPan()->setAction(ui.mActionPan); + m_mapTools->mapToolSpectral()->setAction(ui.mActionSpectral); + + connect(m_mapTools->mapToolSpectral(), SIGNAL(spectralClicked(int,int,QVector,QVector)), + this, SLOT(onLeftMouseButtonPressed(int,int,QVector,QVector))); connect(ui.mActionPan, SIGNAL(triggered()), this, SLOT(onMapToolPanTriggered())); connect(ui.mActionSpectral, SIGNAL(triggered()), this, SLOT(onMapToolSpectralTriggered())); @@ -1030,22 +1028,24 @@ void HPPA::onMapToolPanTriggered() { // Find the current Mapcavas QWidget* currentWidget = m_imageViewerTabWidget->currentWidget(); - if (!currentWidget) return; + if (!currentWidget) + { + ui.mActionPan->setChecked(false); + return; + } QList canvases = currentWidget->findChildren(); if (canvases.isEmpty()) return; Mapcavas* canvas = canvases[0]; - // Clean up old tool - delete m_mapToolPan; - m_mapToolPan = new MapToolPan(canvas, this); - m_mapToolPan->setAction(ui.mActionPan); + // Set canvas on shared tool and activate + m_mapTools->setMapcavas(canvas); // Uncheck the other action ui.mActionSpectral->setChecked(false); - canvas->setMapTool(m_mapToolPan); + canvas->setMapTool(m_mapTools->mapToolPan()); } void HPPA::onMapToolSpectralTriggered() @@ -1059,19 +1059,13 @@ void HPPA::onMapToolSpectralTriggered() Mapcavas* canvas = canvases[0]; - // Clean up old tool - delete m_mapToolSpectral; - m_mapToolSpectral = new MapToolSpectral(canvas, this); - m_mapToolSpectral->setAction(ui.mActionSpectral); + // Set canvas on shared tool and activate + m_mapTools->setMapcavas(canvas); // Uncheck the other action ui.mActionPan->setChecked(false); - // Connect spectral signal to existing slot - connect(m_mapToolSpectral, SIGNAL(spectralClicked(int,int,QVector,QVector)), - this, SLOT(onLeftMouseButtonPressed(int,int,QVector,QVector))); - - canvas->setMapTool(m_mapToolSpectral); + canvas->setMapTool(m_mapTools->mapToolSpectral()); } //---------------------------------------------------- @@ -1151,7 +1145,7 @@ void HPPA::createPlantPhenotypeScenario() // return; //在菜单中选择移动平台 - ui.mAction_2AxisMotor_new->setChecked(true); + ui.mAction_2AxisMotor_new->setChecked(true); //右下角控制tab m_tabManager->hideTab(m_rac); @@ -1258,7 +1252,7 @@ void HPPA::onStartRecordStep1() removeAllLayersInRasterGroup(); ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); //应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号) m_Imager->setFileName2Save(imgPath); @@ -1292,7 +1286,7 @@ void HPPA::onStartRecordStep1() m_tmc->run(); ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); } else { @@ -1353,21 +1347,15 @@ void HPPA::onTabWidgetCurrentChanged(int index)//代码新建一个tab,会调 // Re-apply the current map tool to the new canvas Mapcavas* canvas = currentImageViewer[0]; + m_mapTools->setMapcavas(canvas); + if (ui.mActionPan->isChecked()) { - delete m_mapToolPan; - m_mapToolPan = new MapToolPan(canvas, this); - m_mapToolPan->setAction(ui.mActionPan); - canvas->setMapTool(m_mapToolPan); + canvas->setMapTool(m_mapTools->mapToolPan()); } else if (ui.mActionSpectral->isChecked()) { - delete m_mapToolSpectral; - m_mapToolSpectral = new MapToolSpectral(canvas, this); - m_mapToolSpectral->setAction(ui.mActionSpectral); - connect(m_mapToolSpectral, SIGNAL(spectralClicked(int,int,QVector,QVector)), - this, SLOT(onLeftMouseButtonPressed(int,int,QVector,QVector))); - canvas->setMapTool(m_mapToolSpectral); + canvas->setMapTool(m_mapTools->mapToolSpectral()); } } @@ -1932,9 +1920,9 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt //cv::imwrite(rgbFilePathStrech, rgbImageStretched); //创建需要显示的图像--qt版本 - //QRect CuttedRect = m_Imager->getRgbImage()->m_QRgbImage->rect();//先获取image整个rect + //QRect CuttedRect = m_Imager->getRgbImage()->m_matRgbImage->rect();//先获取image整个rect //CuttedRect.setHeight(m_Imager->getFrameCounter() - 1);//裁剪rect - //QImage CuttedImage = m_Imager->getRgbImage()->m_QRgbImage->copy(CuttedRect); + //QImage CuttedImage = m_Imager->getRgbImage()->m_matRgbImage->copy(CuttedRect); //currentImageViewer[0]->SetImage(&QPixmap::fromImage(CuttedImage));//绘制图像 } diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 434206f..790b2ac 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -65,6 +65,7 @@ #include "MapTool.h" #include "MapToolPan.h" #include "MapToolSpectral.h" +#include "MapTools.h" #define PI 3.1415926 @@ -279,8 +280,7 @@ private: MapLayerStore* m_MapLayerStore = nullptr; // Map tools - MapToolPan* m_mapToolPan = nullptr; - MapToolSpectral* m_mapToolSpectral = nullptr; + MapTools* m_mapTools = nullptr; void initMapTools(); public Q_SLOTS: diff --git a/HPPA/HPPA.vcxproj b/HPPA/HPPA.vcxproj index fa10088..1eac651 100644 --- a/HPPA/HPPA.vcxproj +++ b/HPPA/HPPA.vcxproj @@ -126,6 +126,7 @@ + @@ -211,6 +212,7 @@ + diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters index 90e3b71..2aa38ac 100644 --- a/HPPA/HPPA.vcxproj.filters +++ b/HPPA/HPPA.vcxproj.filters @@ -187,6 +187,9 @@ Source Files + + Source Files + @@ -300,6 +303,9 @@ Header Files + + Header Files + diff --git a/HPPA/MapTool.cpp b/HPPA/MapTool.cpp index 97e2245..9953306 100644 --- a/HPPA/MapTool.cpp +++ b/HPPA/MapTool.cpp @@ -3,9 +3,8 @@ #include "ImageViewer.h" #include -MapTool::MapTool(Mapcavas* canvas, QObject* parent) +MapTool::MapTool(QObject* parent) : QObject(parent) - , m_canvas(canvas) , m_cursor(Qt::ArrowCursor) { } @@ -28,6 +27,19 @@ void MapTool::setAction(QAction* action) m_action = action; } +void MapTool::setMapcavas(Mapcavas* canvas) +{ + if (m_canvas == canvas) + return; + + if (m_isActive && m_canvas) + { + deactivate(); + } + + m_canvas = canvas; +} + Mapcavas* MapTool::canvas() const { return m_canvas; diff --git a/HPPA/MapTool.h b/HPPA/MapTool.h index bec3875..6592e47 100644 --- a/HPPA/MapTool.h +++ b/HPPA/MapTool.h @@ -4,6 +4,7 @@ #include #include #include +#include class Mapcavas; class QAction; @@ -20,7 +21,7 @@ public: }; Q_DECLARE_FLAGS(Flags, Flag) - MapTool(Mapcavas* canvas, QObject* parent = nullptr); + MapTool(QObject* parent = nullptr); virtual ~MapTool(); virtual Flags flags() const { return NoFlags; } @@ -28,6 +29,7 @@ public: QAction* action() const; void setAction(QAction* action); + void setMapcavas(Mapcavas* canvas); Mapcavas* canvas() const; virtual void setCursor(const QCursor& cursor); @@ -47,8 +49,10 @@ signals: void activated(); void deactivated(); -private: +protected: Mapcavas* m_canvas = nullptr; + +private: QAction* m_action = nullptr; QCursor m_cursor; bool m_isActive = false; diff --git a/HPPA/MapToolPan.cpp b/HPPA/MapToolPan.cpp index 16bf78f..e720f9a 100644 --- a/HPPA/MapToolPan.cpp +++ b/HPPA/MapToolPan.cpp @@ -4,8 +4,8 @@ #include #include -MapToolPan::MapToolPan(Mapcavas* canvas, QObject* parent) - : MapTool(canvas, parent) +MapToolPan::MapToolPan(QObject* parent) + : MapTool(parent) { setCursor(Qt::OpenHandCursor); } diff --git a/HPPA/MapToolPan.h b/HPPA/MapToolPan.h index 919d1a1..2e4a858 100644 --- a/HPPA/MapToolPan.h +++ b/HPPA/MapToolPan.h @@ -9,7 +9,7 @@ class MapToolPan : public MapTool Q_OBJECT public: - MapToolPan(Mapcavas* canvas, QObject* parent = nullptr); + MapToolPan(QObject* parent = nullptr); ~MapToolPan(); void activate() override; diff --git a/HPPA/MapToolSpectral.cpp b/HPPA/MapToolSpectral.cpp index 9c1174b..f61fe33 100644 --- a/HPPA/MapToolSpectral.cpp +++ b/HPPA/MapToolSpectral.cpp @@ -5,8 +5,8 @@ #include #include -MapToolSpectral::MapToolSpectral(Mapcavas* canvas, QObject* parent) - : MapTool(canvas, parent) +MapToolSpectral::MapToolSpectral(QObject* parent) + : MapTool(parent) { setCursor(Qt::CrossCursor); } diff --git a/HPPA/MapToolSpectral.h b/HPPA/MapToolSpectral.h index fea4838..6e4ca99 100644 --- a/HPPA/MapToolSpectral.h +++ b/HPPA/MapToolSpectral.h @@ -9,7 +9,7 @@ class MapToolSpectral : public MapTool Q_OBJECT public: - MapToolSpectral(Mapcavas* canvas, QObject* parent = nullptr); + MapToolSpectral(QObject* parent = nullptr); ~MapToolSpectral(); void canvasMousePressEvent(QMouseEvent* e) override; diff --git a/HPPA/MapTools.cpp b/HPPA/MapTools.cpp new file mode 100644 index 0000000..991db1d --- /dev/null +++ b/HPPA/MapTools.cpp @@ -0,0 +1,44 @@ +#include "stdafx.h" +#include "MapTools.h" +#include "MapToolPan.h" +#include "MapToolSpectral.h" + +MapTools::MapTools(QObject* parent) + : QObject(parent) +{ + m_mapToolPan = new MapToolPan(this); + m_mapToolSpectral = new MapToolSpectral(this); +} + +MapTools::~MapTools() +{ +} + +MapToolPan* MapTools::mapToolPan() const +{ + return m_mapToolPan; +} + +MapToolSpectral* MapTools::mapToolSpectral() const +{ + return m_mapToolSpectral; +} + +MapTool* MapTools::mapTool(Tool tool) const +{ + switch (tool) + { + case Pan: + return m_mapToolPan; + case Spectral: + return m_mapToolSpectral; + default: + return nullptr; + } +} + +void MapTools::setMapcavas(Mapcavas* canvas) +{ + m_mapToolPan->setMapcavas(canvas); + m_mapToolSpectral->setMapcavas(canvas); +} diff --git a/HPPA/MapTools.h b/HPPA/MapTools.h new file mode 100644 index 0000000..83ea92b --- /dev/null +++ b/HPPA/MapTools.h @@ -0,0 +1,37 @@ +#ifndef MAPTOOLS_H +#define MAPTOOLS_H + +#include + +class MapTool; +class MapToolPan; +class MapToolSpectral; +class Mapcavas; + +class MapTools : public QObject +{ + Q_OBJECT + +public: + enum Tool + { + Pan, + Spectral, + }; + + MapTools(QObject* parent = nullptr); + ~MapTools(); + + MapToolPan* mapToolPan() const; + MapToolSpectral* mapToolSpectral() const; + + MapTool* mapTool(Tool tool) const; + + void setMapcavas(Mapcavas* canvas); + +private: + MapToolPan* m_mapToolPan = nullptr; + MapToolSpectral* m_mapToolSpectral = nullptr; +}; + +#endif // MAPTOOLS_H