优化数据表显示管理内存泄露
This commit is contained in:
parent
259c798b5d
commit
c020345b76
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<MeasureAnalysisView> _ptr_analyze_view;
|
||||
MeasureAnalysisView* _ptr_analyze_view { nullptr };
|
||||
|
||||
private:
|
||||
TreeItemType _type;
|
||||
|
|
|
|||
|
|
@ -27,44 +27,44 @@ QMap<QString, MeasureAnalysisView::ViewType> MeasureAnalysisView::_s_analyze_vie
|
|||
MeasureAnalysisView::ViewType::AntiCoincidenceSpectrum }
|
||||
};
|
||||
|
||||
std::shared_ptr<MeasureAnalysisView> MeasureAnalysisView::NewAnalyzeView(const QString& view_type_text)
|
||||
MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(const QString& view_type_text)
|
||||
{
|
||||
std::shared_ptr<MeasureAnalysisView> 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<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::CountSpectrum: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::CoincidenceEnergySpectrum3D: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::CountingRate: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::EnergyPeakFit: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::NuclideAnalysis: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::ParticleInTime: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::ParticleTimeDiff: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::CoincidenceEventTime: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::CoincidenceEnergySpectrum: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
case ViewType::AntiCoincidenceSpectrum: {
|
||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
||||
new_view = new MeasureAnalysisDataTableView;
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public:
|
|||
CoincidenceEnergySpectrum,
|
||||
AntiCoincidenceSpectrum
|
||||
};
|
||||
static std::shared_ptr<MeasureAnalysisView> NewAnalyzeView(const QString& view_type_text);
|
||||
static MeasureAnalysisView* NewAnalyzeView(const QString& view_type_text);
|
||||
static const QString& GetAnalyzeViewTypeText(ViewType type);
|
||||
private:
|
||||
static QMap<QString, ViewType> _s_analyze_view_type_list;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user