优化数据表显示管理内存泄露
This commit is contained in:
parent
259c798b5d
commit
c020345b76
|
|
@ -220,27 +220,20 @@ void MainWindow::initAction()
|
||||||
if ( !view_exist ) {
|
if ( !view_exist ) {
|
||||||
ads::CDockWidget* dock_widget = new ads::CDockWidget(view->GetViewName());
|
ads::CDockWidget* dock_widget = new ads::CDockWidget(view->GetViewName());
|
||||||
dock_widget->setWidget(view);
|
dock_widget->setWidget(view);
|
||||||
dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::CustomCloseHandling);
|
|
||||||
dock_widget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContentMinimumSize);
|
dock_widget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContentMinimumSize);
|
||||||
|
if (view->GetAnalyzeViewType() == MeasureAnalysisView::ViewType::DataTable) {
|
||||||
|
dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::DockWidgetDeleteOnClose);
|
||||||
|
_menu_view_data_table_list->addAction(dock_widget->toggleViewAction());
|
||||||
|
} else {
|
||||||
|
dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::CustomCloseHandling);
|
||||||
dock_widget->setProperty("TakeWidget", true);
|
dock_widget->setProperty("TakeWidget", true);
|
||||||
|
|
||||||
connect(dock_widget, &CDockWidget::closeRequested, [dock_widget](){
|
connect(dock_widget, &CDockWidget::closeRequested, [dock_widget](){
|
||||||
dock_widget->takeWidget();
|
dock_widget->takeWidget();
|
||||||
dock_widget->deleteDockWidget();
|
dock_widget->deleteDockWidget();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
auto central_area = _dock_manager->centralWidget()->dockAreaWidget();
|
auto central_area = _dock_manager->centralWidget()->dockAreaWidget();
|
||||||
_dock_manager->addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, dock_widget, central_area);
|
_dock_manager->addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, dock_widget, central_area);
|
||||||
|
|
||||||
MeasureAnalysisView::ViewType view_type = view->GetAnalyzeViewType();
|
|
||||||
switch (view_type) {
|
|
||||||
case MeasureAnalysisView::ViewType::DataTable: {
|
|
||||||
dock_widget->setFeatures(dock_widget->features() | ads::CDockWidget::DockWidgetDeleteOnClose);
|
|
||||||
_menu_view_data_table_list->addAction(dock_widget->toggleViewAction());
|
|
||||||
} break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,15 @@
|
||||||
|
|
||||||
MeasureAnalysisDataTableView::MeasureAnalysisDataTableView(QWidget* parent)
|
MeasureAnalysisDataTableView::MeasureAnalysisDataTableView(QWidget* parent)
|
||||||
: MeasureAnalysisView { parent }
|
: MeasureAnalysisView { parent }
|
||||||
, _preload_policy(PreloadPolicy::Balanced)
|
, _preload_policy(PreloadPolicy::Conservative)
|
||||||
, _block_size(1000)
|
, _block_size(100)
|
||||||
, _buffer_size(50)
|
, _buffer_size(50)
|
||||||
{
|
{
|
||||||
this->setAnalyzeViewType(ViewType::DataTable);
|
this->setAnalyzeViewType(ViewType::DataTable);
|
||||||
QHBoxLayout* layout = new QHBoxLayout(this);
|
QHBoxLayout* layout = new QHBoxLayout(this);
|
||||||
// 创建表格视图
|
// 创建表格视图
|
||||||
_tableView = new VirtualTableView(this);
|
_tableView = new VirtualTableView(this);
|
||||||
_tableView->setFixedRowHeight(25); // 设置固定行高
|
_tableView->setFixedRowHeight(25);
|
||||||
_tableView->setShowGrid(true);
|
_tableView->setShowGrid(true);
|
||||||
_tableView->setAlternatingRowColors(false);
|
_tableView->setAlternatingRowColors(false);
|
||||||
layout->addWidget(_tableView);
|
layout->addWidget(_tableView);
|
||||||
|
|
|
||||||
|
|
@ -35,26 +35,12 @@ TreeWidget::TreeWidget(QWidget* parent)
|
||||||
if (item) {
|
if (item) {
|
||||||
TreeItemType item_type = item->GetType();
|
TreeItemType item_type = item->GetType();
|
||||||
switch (item_type) {
|
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::ParticleData:
|
||||||
case TreeItemType::ParticleCountData:
|
case TreeItemType::ParticleCountData:
|
||||||
case TreeItemType::ConformParticleData: {
|
case TreeItemType::ConformParticleData: {
|
||||||
const QString view_type_text = MeasureAnalysisView::GetAnalyzeViewTypeText(MeasureAnalysisView::ViewType::DataTable);
|
const QString view_type_text = MeasureAnalysisView::GetAnalyzeViewTypeText(MeasureAnalysisView::ViewType::DataTable);
|
||||||
item->NewAnalyzeView(item->GetName(), item->GetDescription(), view_type_text);
|
item->NewAnalyzeView(item->GetName(), item->GetDescription(), view_type_text);
|
||||||
MeasureAnalysisView* view = item->GetAnalyzeView();
|
MeasureAnalysisView* view = item->GetAnalyzeView(true);
|
||||||
if (view) {
|
if (view) {
|
||||||
emit currentItemViewWidget(view);
|
emit currentItemViewWidget(view);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,14 @@ TreeItem::TreeItem()
|
||||||
this->_type = TreeItemType::None;
|
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()
|
const QString& TreeItem::GetName()
|
||||||
{
|
{
|
||||||
return this->_name;
|
return this->_name;
|
||||||
|
|
@ -40,9 +48,13 @@ void TreeItem::SetDescription(const QString& desc)
|
||||||
this->setStatusTip(0, 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)
|
void TreeItem::NewAnalyzeView(const QString &name, const QString &description, const QString &view_type_text)
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,15 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TreeItem();
|
TreeItem();
|
||||||
|
virtual ~TreeItem();
|
||||||
|
|
||||||
const QString& GetName();
|
const QString& GetName();
|
||||||
void SetName(const QString& name);
|
void SetName(const QString& name);
|
||||||
const QString& GetDescription();
|
const QString& GetDescription();
|
||||||
void SetDescription(const QString& desc);
|
void SetDescription(const QString& desc);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MeasureAnalysisView* GetAnalyzeView() const;
|
MeasureAnalysisView* GetAnalyzeView(bool b_take = false);
|
||||||
void NewAnalyzeView(const QString& name, const QString& description, const QString& view_type_text);
|
void NewAnalyzeView(const QString& name, const QString& description, const QString& view_type_text);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -45,7 +47,7 @@ public:
|
||||||
friend QDataStream& operator>>(QDataStream& in, TreeItem& item);
|
friend QDataStream& operator>>(QDataStream& in, TreeItem& item);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<MeasureAnalysisView> _ptr_analyze_view;
|
MeasureAnalysisView* _ptr_analyze_view { nullptr };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TreeItemType _type;
|
TreeItemType _type;
|
||||||
|
|
|
||||||
|
|
@ -27,44 +27,44 @@ QMap<QString, MeasureAnalysisView::ViewType> MeasureAnalysisView::_s_analyze_vie
|
||||||
MeasureAnalysisView::ViewType::AntiCoincidenceSpectrum }
|
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)) {
|
if (_s_analyze_view_type_list.contains(view_type_text)) {
|
||||||
ViewType view_type = _s_analyze_view_type_list[view_type_text];
|
ViewType view_type = _s_analyze_view_type_list[view_type_text];
|
||||||
switch (view_type) {
|
switch (view_type) {
|
||||||
case ViewType::DataTable: {
|
case ViewType::DataTable: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::CountSpectrum: {
|
case ViewType::CountSpectrum: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::CoincidenceEnergySpectrum3D: {
|
case ViewType::CoincidenceEnergySpectrum3D: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::CountingRate: {
|
case ViewType::CountingRate: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::EnergyPeakFit: {
|
case ViewType::EnergyPeakFit: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::NuclideAnalysis: {
|
case ViewType::NuclideAnalysis: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::ParticleInTime: {
|
case ViewType::ParticleInTime: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::ParticleTimeDiff: {
|
case ViewType::ParticleTimeDiff: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::CoincidenceEventTime: {
|
case ViewType::CoincidenceEventTime: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::CoincidenceEnergySpectrum: {
|
case ViewType::CoincidenceEnergySpectrum: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
case ViewType::AntiCoincidenceSpectrum: {
|
case ViewType::AntiCoincidenceSpectrum: {
|
||||||
new_view = std::shared_ptr<MeasureAnalysisView>(new MeasureAnalysisDataTableView);
|
new_view = new MeasureAnalysisDataTableView;
|
||||||
} break;
|
} break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public:
|
||||||
CoincidenceEnergySpectrum,
|
CoincidenceEnergySpectrum,
|
||||||
AntiCoincidenceSpectrum
|
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);
|
static const QString& GetAnalyzeViewTypeText(ViewType type);
|
||||||
private:
|
private:
|
||||||
static QMap<QString, ViewType> _s_analyze_view_type_list;
|
static QMap<QString, ViewType> _s_analyze_view_type_list;
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,11 @@ VirtualTableView::~VirtualTableView()
|
||||||
{
|
{
|
||||||
m_updateTimer.stop();
|
m_updateTimer.stop();
|
||||||
m_scrollSpeedTimer.stop();
|
m_scrollSpeedTimer.stop();
|
||||||
|
|
||||||
|
if (m_virtualModel) {
|
||||||
|
delete m_virtualModel;
|
||||||
|
m_virtualModel = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirtualTableView::setVirtualModel(VirtualTableModel* model)
|
void VirtualTableView::setVirtualModel(VirtualTableModel* model)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user