From 304a1aa28b794b73226782a578f46d6c6ff23746 Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Mon, 25 May 2026 17:15:19 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=EF=BC=9A3D=E6=A4=8D=E7=89=A9=E8=A1=A8=E5=9E=8B=EF=BC=8C?= =?UTF-8?q?=E5=8F=AA=E6=B6=89=E5=8F=8A=E4=BA=86=E9=83=A8=E5=88=86=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/HPPA.cpp | 181 ++++++++++++++++++++++---------------------- HPPA/HPPA.h | 2 + HPPA/HPPA.ui | 9 +++ HPPA/TabManager.cpp | 18 +++++ HPPA/TabManager.h | 1 + 5 files changed, 122 insertions(+), 89 deletions(-) diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 5e95bc8..7995ee3 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -117,6 +117,7 @@ HPPA::HPPA(QWidget* parent) connect(this->ui.action_about, SIGNAL(triggered()), this, SLOT(onAbout())); connect(this->ui.mActionOneMotorScenario, SIGNAL(triggered()), this, SLOT(createOneMotorScenario())); connect(this->ui.mActionPlantPhenotypeScenario, SIGNAL(triggered()), this, SLOT(createPlantPhenotypeScenario())); + connect(this->ui.mAction3DPlantPhenotypeScenario, SIGNAL(triggered()), this, SLOT(create3DPlantPhenotypeScenario())); connect(this->ui.mActionMicroscopicMotionControlScenario, SIGNAL(triggered()), this, SLOT(createMicroscopicMotionControlScenario())); delete ui.centralWidget; @@ -1015,41 +1016,48 @@ void HPPA::removeLayerByTreeIndex() LayerTreeNode* node = static_cast(currentIndexTmp.internalPointer()); if (!node || node->type() != LayerTreeNode::Type::Layer) return; - auto* layerNode = static_cast(node); - MapLayer* mapLayer = layerNode->mapLayer(); + removeLayerByNode(node); +} - if (!mapLayer || !m_MapLayerStore) return; +void HPPA::removeLayerByNode(LayerTreeNode* node) +{ + if (!node || node->type() != LayerTreeNode::Type::Layer) return; - // 获取该 mapLayer 对应的所有 widget 并从 tab 中移除 - std::vector widgets = m_MapLayerStore->widgetsForMapLayer(mapLayer); - for (QWidget* widget : widgets) - { - if (widget && m_imageViewerTabWidget) - { - const int tabIndex = m_imageViewerTabWidget->indexOf(widget); - if (tabIndex >= 0) - { - if (m_recordFrameCounter) - { - m_recordFrameCounter->removeCounter(widget); - } - m_imageViewerTabWidget->removeTab(tabIndex); - } - widget->deleteLater(); - } - } + auto* layerNode = static_cast(node); + MapLayer* mapLayer = layerNode->mapLayer(); - // 删除 MapLayerStore 中的 mapLayer - m_MapLayerStore->removeLayer(mapLayer); + if (!mapLayer || !m_MapLayerStore) return; - // 删除树模型中的节点 - LayerTreeNode* parent = node->parentNode(); - int row = node->rowInParent(); - LayerTreeNode* removed = model->removeNode(parent, row); - if (removed) - { - delete removed; - } + // 获取该 mapLayer 对应的所有 widget 并从 tab 中移除 + std::vector widgets = m_MapLayerStore->widgetsForMapLayer(mapLayer); + for (QWidget* widget : widgets) + { + if (widget && m_imageViewerTabWidget) + { + const int tabIndex = m_imageViewerTabWidget->indexOf(widget); + if (tabIndex >= 0) + { + if (m_recordFrameCounter) + { + m_recordFrameCounter->removeCounter(widget); + } + m_imageViewerTabWidget->removeTab(tabIndex); + } + widget->deleteLater(); + } + } + + // 删除 MapLayerStore 中的 mapLayer + m_MapLayerStore->removeLayer(mapLayer); + + // 删除树模型中的节点 + LayerTreeNode* parent = node->parentNode(); + int row = node->rowInParent(); + LayerTreeNode* removed = m_LayerTreeModel->removeNode(parent, row); + if (removed) + { + delete removed; + } } void HPPA::showColorImageByTreeIndex() @@ -1130,46 +1138,7 @@ void HPPA::removeAllLayersInRasterGroup() pending.pop_back(); if (!node) continue; - for (int i = 0; i < node->childCount(); ++i) - { - pending.push_back(node->childAt(i)); - } - - if (node->type() != LayerTreeNode::Type::Layer) continue; - - auto* layerNode = static_cast(node); - MapLayer* mapLayer = layerNode->mapLayer(); - QWidget* layerWidget = nullptr; - - if (mapLayer && m_MapLayerStore) - { - layerWidget = m_MapLayerStore->widgetForLayer(mapLayer); - m_MapLayerStore->removeLayer(mapLayer); - } - - if (layerWidget && m_imageViewerTabWidget) - { - const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget); - if (tabIndex >= 0) - { - if (m_recordFrameCounter) - { - m_recordFrameCounter->removeCounter(layerWidget); - } - m_imageViewerTabWidget->removeTab(tabIndex); - } - layerWidget->deleteLater(); - } - } - - while (m_RasterGroup->childCount() > 0) - { - const int row = m_RasterGroup->childCount() - 1; - LayerTreeNode* removed = m_LayerTreeModel->removeNode(m_RasterGroup, row); - if (removed) - { - delete removed; - } + removeLayerByNode(node); } } @@ -1265,6 +1234,7 @@ void HPPA::createScenarioActionGroup() m_ScenarioActionGroup = new QActionGroup(this); m_ScenarioActionGroup->addAction(ui.mActionOneMotorScenario); m_ScenarioActionGroup->addAction(ui.mActionPlantPhenotypeScenario); + m_ScenarioActionGroup->addAction(ui.mAction3DPlantPhenotypeScenario); m_ScenarioActionGroup->addAction(ui.mActionMicroscopicMotionControlScenario); // 读取上次选择的结果 @@ -1282,6 +1252,11 @@ void HPPA::createScenarioActionGroup() ui.mActionPlantPhenotypeScenario->setChecked(true); ui.mActionPlantPhenotypeScenario->trigger(); } + else if (lastSelectedAction == "mAction3DPlantPhenotypeScenario") + { + ui.mAction3DPlantPhenotypeScenario->setChecked(true); + ui.mAction3DPlantPhenotypeScenario->trigger(); + } else if (lastSelectedAction == "mActionMicroscopicMotionControlScenario") { ui.mActionMicroscopicMotionControlScenario->setChecked(true); @@ -1317,14 +1292,10 @@ void HPPA::createOneMotorScenario() ui.mAction_1AxisMotor->setChecked(true); //右下角控制tab - m_tabManager->hideTab(m_singleLensReflexCameraWindow); - m_tabManager->hideTab(m_depthCameraWindow); - m_tabManager->hideTab(m_rgbCameraControlWindow); - m_tabManager->hideTab(m_adt); - m_tabManager->hideTab(m_pc); - m_tabManager->hideTab(m_rac); - m_tabManager->hideTab(m_tmc); + m_tabManager->hideAllTabs(); + m_tabManager->showTab(m_hic); + m_tabManager->showTab(m_ic); m_tabManager->showTab(m_omc); m_view3DModelManager->switchScenario(View3DModelManager::ScenarioType::OneMotor); @@ -1352,12 +1323,37 @@ void HPPA::createPlantPhenotypeScenario() ui.mAction_2AxisMotor_new->setChecked(true); //右下角控制tab - m_tabManager->hideTab(m_rac); - m_tabManager->hideTab(m_omc); + m_tabManager->hideAllTabs(); + m_tabManager->showTab(m_hic); + m_tabManager->showTab(m_ic); + m_tabManager->showTab(m_rgbCameraControlWindow); + m_tabManager->showTab(m_adt); + m_tabManager->showTab(m_pc); + m_tabManager->showTab(m_tmc); + + m_view3DModelManager->switchScenario(View3DModelManager::ScenarioType::PlantPhenotype); + + //右上角轮播 + +} + +void HPPA::create3DPlantPhenotypeScenario() +{ + //if (ui.mAction3DPlantPhenotypeScenario->isChecked()) + // return; + + //在菜单中选择移动平台 + ui.mAction_2AxisMotor_new->setChecked(true); + + //右下角控制tab + m_tabManager->hideAllTabs(); + + m_tabManager->showTab(m_hic); + m_tabManager->showTab(m_ic); m_tabManager->showTab(m_depthCameraWindow); m_tabManager->showTab(m_singleLensReflexCameraWindow); - m_tabManager->showTab(m_rgbCameraControlWindow); + //m_tabManager->showTab(m_rgbCameraControlWindow); m_tabManager->showTab(m_adt); m_tabManager->showTab(m_pc); m_tabManager->showTab(m_tmc); @@ -1377,14 +1373,10 @@ void HPPA::createMicroscopicMotionControlScenario() ui.mAction_2AxisMotor_new->setChecked(true); //右下角控制tab - m_tabManager->hideTab(m_singleLensReflexCameraWindow); - m_tabManager->hideTab(m_depthCameraWindow); - m_tabManager->hideTab(m_rgbCameraControlWindow); - m_tabManager->hideTab(m_adt); - m_tabManager->hideTab(m_pc); - m_tabManager->hideTab(m_rac); - m_tabManager->hideTab(m_omc); + m_tabManager->hideAllTabs(); + m_tabManager->showTab(m_hic); + m_tabManager->showTab(m_ic); m_tabManager->showTab(m_tmc); m_view3DModelManager->switchScenario(View3DModelManager::ScenarioType::MicroscopicMotionControl); @@ -2413,6 +2405,9 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt return; } + if (ui.mAction3DPlantPhenotypeScenario->isChecked()) + return; + //return; //获取绘图控件 QWidget* currentWidget = m_MapLayerStore->widgetForLayer(filePath); @@ -2606,7 +2601,15 @@ void WorkerThread3::run() void HPPA::onLayerCreatedFromFile(const QString& baseName, const QString& filePath, int fileIndex) { if (!m_LayerTreeModel || !m_RasterGroup) return; - addLayer(baseName, filePath, false); + + if (ui.mAction3DPlantPhenotypeScenario->isChecked()) + { + addLayer(baseName, filePath, false, false); + } + else + { + addLayer(baseName, filePath, false); + } } void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refresh, bool isAddImage) diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index f7a8b4a..542c616 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -369,6 +369,7 @@ public Q_SLOTS: void createOneMotorScenario(); void createPlantPhenotypeScenario(); + void create3DPlantPhenotypeScenario(); void onCreated3DModelPlantPhenotype(); void onCreated3DModelMicroscopicMotion(); void createMicroscopicMotionControlScenario(); @@ -378,6 +379,7 @@ public Q_SLOTS: void newImage(RasterLayer* ml, RasterImageLayer::RendererType, LayerTreeNode* parent, bool refresh=true); void onLayerCreatedFromFile(const QString& baseName, const QString& filePath, int fileIndex); void removeLayerByTreeIndex(); + void removeLayerByNode(LayerTreeNode* node); void showColorImageByTreeIndex(); void removeImageByTreeIndex(); void removeAllLayersInRasterGroup(); diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui index 8d3bf9a..ed4dd23 100644 --- a/HPPA/HPPA.ui +++ b/HPPA/HPPA.ui @@ -134,6 +134,7 @@ color:white; + @@ -734,6 +735,14 @@ QPushButton:pressed 显微运动控制台 + + + true + + + 3D植物表型 + + diff --git a/HPPA/TabManager.cpp b/HPPA/TabManager.cpp index 572ff4a..24c651b 100644 --- a/HPPA/TabManager.cpp +++ b/HPPA/TabManager.cpp @@ -7,6 +7,24 @@ TabManager::TabManager(QTabWidget* tabWidget, QObject* parent) Q_ASSERT(m_tabWidget); } +void TabManager::hideAllTabs() +{ + int tabNumber = m_tabWidget->count(); + for (size_t i = 0; i < tabNumber; i++) + { + int idx = 0; + + TabInfo info; + info.index = idx; + info.text = m_tabWidget->tabText(idx); + info.icon = m_tabWidget->tabIcon(idx); + info.toolTip = m_tabWidget->tabToolTip(idx); + + m_hiddenTabs.insert(m_tabWidget->widget(idx), info); + m_tabWidget->removeTab(idx); + } +} + void TabManager::hideTab(QWidget* page) { if (!page || !m_tabWidget) diff --git a/HPPA/TabManager.h b/HPPA/TabManager.h index fd7d227..2758ae5 100644 --- a/HPPA/TabManager.h +++ b/HPPA/TabManager.h @@ -10,6 +10,7 @@ class TabManager : public QObject public: explicit TabManager(QTabWidget* tabWidget, QObject* parent = nullptr); + void hideAllTabs(); void hideTab(QWidget* page); void showTab(QWidget* page); bool isHidden(QWidget* page) const;