From c020345b76067f641580d394a60bc734c7fff62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B5=B7?= Date: Wed, 4 Mar 2026 14:39:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E8=A1=A8?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=AE=A1=E7=90=86=E5=86=85=E5=AD=98=E6=B3=84?= =?UTF-8?q?=E9=9C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MainWindow.cpp | 27 ++++++++++----------------- src/MeasureAnalysisDataTableView.cpp | 6 +++--- src/MeasureAnalysisTree.cpp | 16 +--------------- src/MeasureAnalysisTreeItem.cpp | 16 ++++++++++++++-- src/MeasureAnalysisTreeItem.h | 6 ++++-- src/MeasureAnalysisView.cpp | 26 +++++++++++++------------- src/MeasureAnalysisView.h | 2 +- src/VirtualTable/VirtualTableView.cpp | 5 +++++ 8 files changed, 51 insertions(+), 53 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 90fb7ea..8b0ce0a 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -220,27 +220,20 @@ void MainWindow::initAction() if ( !view_exist ) { ads::CDockWidget* dock_widget = new ads::CDockWidget(view->GetViewName()); dock_widget->setWidget(view); - dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::CustomCloseHandling); dock_widget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContentMinimumSize); - dock_widget->setProperty("TakeWidget", true); - - connect(dock_widget, &CDockWidget::closeRequested, [dock_widget](){ - dock_widget->takeWidget(); - dock_widget->deleteDockWidget(); - }); - - auto central_area = _dock_manager->centralWidget()->dockAreaWidget(); - _dock_manager->addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, dock_widget, central_area); - - MeasureAnalysisView::ViewType view_type = view->GetAnalyzeViewType(); - switch (view_type) { - case MeasureAnalysisView::ViewType::DataTable: { + if (view->GetAnalyzeViewType() == MeasureAnalysisView::ViewType::DataTable) { dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::DockWidgetDeleteOnClose); _menu_view_data_table_list->addAction(dock_widget->toggleViewAction()); - } break; - default: - break; + } else { + dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::CustomCloseHandling); + dock_widget->setProperty("TakeWidget", true); + connect(dock_widget, &CDockWidget::closeRequested, [dock_widget](){ + dock_widget->takeWidget(); + dock_widget->deleteDockWidget(); + }); } + auto central_area = _dock_manager->centralWidget()->dockAreaWidget(); + _dock_manager->addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, dock_widget, central_area); } } }); diff --git a/src/MeasureAnalysisDataTableView.cpp b/src/MeasureAnalysisDataTableView.cpp index cc87d32..3bdec42 100644 --- a/src/MeasureAnalysisDataTableView.cpp +++ b/src/MeasureAnalysisDataTableView.cpp @@ -6,15 +6,15 @@ MeasureAnalysisDataTableView::MeasureAnalysisDataTableView(QWidget* parent) : MeasureAnalysisView { parent } - , _preload_policy(PreloadPolicy::Balanced) - , _block_size(1000) + , _preload_policy(PreloadPolicy::Conservative) + , _block_size(100) , _buffer_size(50) { this->setAnalyzeViewType(ViewType::DataTable); QHBoxLayout* layout = new QHBoxLayout(this); // 创建表格视图 _tableView = new VirtualTableView(this); - _tableView->setFixedRowHeight(25); // 设置固定行高 + _tableView->setFixedRowHeight(25); _tableView->setShowGrid(true); _tableView->setAlternatingRowColors(false); layout->addWidget(_tableView); diff --git a/src/MeasureAnalysisTree.cpp b/src/MeasureAnalysisTree.cpp index 80d971b..43b2e6a 100644 --- a/src/MeasureAnalysisTree.cpp +++ b/src/MeasureAnalysisTree.cpp @@ -35,26 +35,12 @@ TreeWidget::TreeWidget(QWidget* parent) if (item) { TreeItemType item_type = item->GetType(); switch (item_type) { - // case TreeItem::TreeItemType::None: - // break; - // case TreeItem::TreeItemType::MeasureAnalysisProject: - // this->expandItem(item); - // break; - // case TreeItem::TreeItemType::MeasureCtrlGroup: - // this->expandItem(item); - // break; - // case TreeItem::TreeItemType::AnalyzeDataGroup: - // this->expandItem(item); - // break; - // case TreeItem::TreeItemType::AnalyzeViewGroup: - // this->expandItem(item); - // break; case TreeItemType::ParticleData: case TreeItemType::ParticleCountData: case TreeItemType::ConformParticleData: { const QString view_type_text = MeasureAnalysisView::GetAnalyzeViewTypeText(MeasureAnalysisView::ViewType::DataTable); item->NewAnalyzeView(item->GetName(), item->GetDescription(), view_type_text); - MeasureAnalysisView* view = item->GetAnalyzeView(); + MeasureAnalysisView* view = item->GetAnalyzeView(true); if (view) { emit currentItemViewWidget(view); } diff --git a/src/MeasureAnalysisTreeItem.cpp b/src/MeasureAnalysisTreeItem.cpp index 2f89a8a..f30a17a 100644 --- a/src/MeasureAnalysisTreeItem.cpp +++ b/src/MeasureAnalysisTreeItem.cpp @@ -18,6 +18,14 @@ TreeItem::TreeItem() this->_type = TreeItemType::None; } +TreeItem::~TreeItem() +{ + if (this->_ptr_analyze_view) { + delete this->_ptr_analyze_view; + this->_ptr_analyze_view = nullptr; + } +} + const QString& TreeItem::GetName() { return this->_name; @@ -40,9 +48,13 @@ void TreeItem::SetDescription(const QString& desc) this->setStatusTip(0, desc); } -MeasureAnalysisView* TreeItem::GetAnalyzeView() const +MeasureAnalysisView* TreeItem::GetAnalyzeView(bool b_take) { - return this->_ptr_analyze_view.get(); + MeasureAnalysisView* view = this->_ptr_analyze_view; + if ( b_take ) { + this->_ptr_analyze_view = nullptr; + } + return view; } void TreeItem::NewAnalyzeView(const QString &name, const QString &description, const QString &view_type_text) diff --git a/src/MeasureAnalysisTreeItem.h b/src/MeasureAnalysisTreeItem.h index 15e1403..56a95df 100644 --- a/src/MeasureAnalysisTreeItem.h +++ b/src/MeasureAnalysisTreeItem.h @@ -31,13 +31,15 @@ public: public: TreeItem(); + virtual ~TreeItem(); + const QString& GetName(); void SetName(const QString& name); const QString& GetDescription(); void SetDescription(const QString& desc); public: - MeasureAnalysisView* GetAnalyzeView() const; + MeasureAnalysisView* GetAnalyzeView(bool b_take = false); void NewAnalyzeView(const QString& name, const QString& description, const QString& view_type_text); public: @@ -45,7 +47,7 @@ public: friend QDataStream& operator>>(QDataStream& in, TreeItem& item); protected: - std::shared_ptr _ptr_analyze_view; + MeasureAnalysisView* _ptr_analyze_view { nullptr }; private: TreeItemType _type; diff --git a/src/MeasureAnalysisView.cpp b/src/MeasureAnalysisView.cpp index 005b083..ee08f01 100644 --- a/src/MeasureAnalysisView.cpp +++ b/src/MeasureAnalysisView.cpp @@ -27,44 +27,44 @@ QMap MeasureAnalysisView::_s_analyze_vie MeasureAnalysisView::ViewType::AntiCoincidenceSpectrum } }; -std::shared_ptr MeasureAnalysisView::NewAnalyzeView(const QString& view_type_text) +MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(const QString& view_type_text) { - std::shared_ptr new_view; + MeasureAnalysisView* new_view = nullptr; if (_s_analyze_view_type_list.contains(view_type_text)) { ViewType view_type = _s_analyze_view_type_list[view_type_text]; switch (view_type) { case ViewType::DataTable: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::CountSpectrum: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::CoincidenceEnergySpectrum3D: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::CountingRate: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::EnergyPeakFit: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::NuclideAnalysis: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::ParticleInTime: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::ParticleTimeDiff: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::CoincidenceEventTime: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::CoincidenceEnergySpectrum: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; case ViewType::AntiCoincidenceSpectrum: { - new_view = std::shared_ptr(new MeasureAnalysisDataTableView); + new_view = new MeasureAnalysisDataTableView; } break; default: break; diff --git a/src/MeasureAnalysisView.h b/src/MeasureAnalysisView.h index 9c97095..eb29e05 100644 --- a/src/MeasureAnalysisView.h +++ b/src/MeasureAnalysisView.h @@ -24,7 +24,7 @@ public: CoincidenceEnergySpectrum, AntiCoincidenceSpectrum }; - static std::shared_ptr NewAnalyzeView(const QString& view_type_text); + static MeasureAnalysisView* NewAnalyzeView(const QString& view_type_text); static const QString& GetAnalyzeViewTypeText(ViewType type); private: static QMap _s_analyze_view_type_list; diff --git a/src/VirtualTable/VirtualTableView.cpp b/src/VirtualTable/VirtualTableView.cpp index 4ab9ee8..235cb84 100644 --- a/src/VirtualTable/VirtualTableView.cpp +++ b/src/VirtualTable/VirtualTableView.cpp @@ -71,6 +71,11 @@ VirtualTableView::~VirtualTableView() { m_updateTimer.stop(); m_scrollSpeedTimer.stop(); + + if (m_virtualModel) { + delete m_virtualModel; + m_virtualModel = nullptr; + } } void VirtualTableView::setVirtualModel(VirtualTableModel* model)