diff --git a/src/CustomQwtPlot.cpp b/src/CustomQwtPlot.cpp index 8da100b..517bb8a 100644 --- a/src/CustomQwtPlot.cpp +++ b/src/CustomQwtPlot.cpp @@ -54,10 +54,12 @@ QList CustomQwtPlot::GetCurveList() const return _curves.values(); } -void CustomQwtPlot::AddCurve(QwtPlotCurve *curve) +void CustomQwtPlot::AddCurve(QwtPlotCurve *curve, bool auto_color) { if (curve) { - curve->setPen(QPen(getDistinctColorForManyCurves(_curves.count()), 1)); + if ( auto_color ) { + curve->setPen(QPen(getDistinctColorForManyCurves(_curves.count()), 1)); + } curve->setZ(0); curve->attach(this); _curves[curve->title().text()] = curve; @@ -212,14 +214,17 @@ void CustomQwtPlot::showEvent(QShowEvent *event) { Q_UNUSED(event); this->updateAxes(); - double x_min = this->axisScaleDiv(QwtPlot::xBottom).lowerBound(); - double x_max = this->axisScaleDiv(QwtPlot::xBottom).upperBound(); - double y_min = this->axisScaleDiv(QwtPlot::yLeft).lowerBound(); - double y_max = this->axisScaleDiv(QwtPlot::yLeft).upperBound(); - this->_init_x_min = x_min; - this->_init_x_max = x_max; - this->_init_y_min = y_min; - this->_init_y_max = y_max; + if ((0 == this->_init_x_max) && (0 == this->_init_y_max)) { + // double x_min = this->axisScaleDiv(QwtPlot::xBottom).lowerBound(); + double x_max = this->axisScaleDiv(QwtPlot::xBottom).upperBound(); + double y_min = this->axisScaleDiv(QwtPlot::yLeft).lowerBound(); + double y_max = this->axisScaleDiv(QwtPlot::yLeft).upperBound(); + this->_init_x_min = 0; + this->_init_x_max = x_max; + this->_init_y_min = y_min; + this->_init_y_max = y_max; + this->setAxisScale(QwtPlot::xBottom, 0, x_max); + } } CustomQwtPlotXaxisPanner::CustomQwtPlotXaxisPanner(QWidget *canvas) diff --git a/src/CustomQwtPlot.h b/src/CustomQwtPlot.h index 88765f4..713420f 100644 --- a/src/CustomQwtPlot.h +++ b/src/CustomQwtPlot.h @@ -24,7 +24,7 @@ public: QwtPlotCurve* GetCurve(const QString& curve_name); QList GetCurveList() const; - void AddCurve(QwtPlotCurve* curve); + void AddCurve(QwtPlotCurve* curve, bool auto_color = true); QwtPlotMarker* GetMarker(const QString& marker_name, const QString& postion); QList GetMarkerList() const; @@ -42,8 +42,8 @@ protected: bool eventFilter(QObject *obj, QEvent *event) override; virtual void showEvent(QShowEvent *event) override; private: - double _init_x_min = 0, _init_x_max = 10; - double _init_y_min = 0, _init_y_max = 10; + double _init_x_min = 0, _init_x_max = 0; + double _init_y_min = 0, _init_y_max = 0; bool _is_dragging = false; QPoint _last_pos; std::function _event_filter_func = nullptr; diff --git a/src/EnergyCountPeakFitView/EnergyCountPeakFitView.cpp b/src/EnergyCountPeakFitView/EnergyCountPeakFitView.cpp new file mode 100644 index 0000000..8c407b4 --- /dev/null +++ b/src/EnergyCountPeakFitView/EnergyCountPeakFitView.cpp @@ -0,0 +1,212 @@ +#include "EnergyCountPeakFitView.h" +#include "CustomQwtPlot.h" +#include "csv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +EnergyCountPeakFitView::EnergyCountPeakFitView(QWidget *parent) + : MeasureAnalysisView { parent } +{ + this->setViewType(PlotFrame); + + QHBoxLayout* layout = new QHBoxLayout(this); + this->_plot = new CustomQwtPlot(this); + layout->addWidget(this->_plot); + setupPlot(); + this->_menu = new QMenu(this); + setupMenu(); +} + +EnergyCountPeakFitView::~EnergyCountPeakFitView() +{ + LOG_DEBUG(QStringLiteral(u"%1析构.").arg(this->GetViewName())); +} + +void EnergyCountPeakFitView::InitViewWorkspace(const QString &project_name) +{ + Q_UNUSED(project_name); +} + +void EnergyCountPeakFitView::SetAnalyzeDataFilename(const QMap &data_files_set) +{ + if ( !data_files_set.isEmpty() ) { + const QString& data_name = data_files_set.firstKey(); + const QString& data_filename = data_files_set.first().toString(); + if (QFileInfo(data_filename).exists()) { + loadDataFromFile(data_name, data_filename); + } + } +} + +void EnergyCountPeakFitView::setupPlot() +{ + _plot->setCanvasBackground(Qt::white); + QwtPlotCanvas* canvas = qobject_cast(_plot->canvas()); + canvas->setFrameStyle(QFrame::NoFrame); + + QFont font = this->font(); + font.setBold(false); + QwtText energy_label = QStringLiteral(u"能量(KeV)"); + energy_label.setFont(font); + QwtText count_label = QStringLiteral(u"计数"); + count_label.setFont(font); + _plot->setAxisTitle(QwtPlot::xBottom, energy_label); + _plot->setAxisTitle(QwtPlot::yLeft, count_label); + + // set axis auto scale + _plot->setAxisAutoScale(QwtPlot::xBottom, true); + _plot->setAxisAutoScale(QwtPlot::yLeft, true); + + _plot->enableAxis(QwtPlot::xBottom); + _plot->enableAxis(QwtPlot::yLeft); + + // 设置QWT图例 + // QwtLegend* legend = new QwtLegend(); + // legend->setDefaultItemMode(QwtLegendData::ReadOnly); + // _plot->insertLegend(legend, QwtPlot::RightLegend); + + _plot->SetXaxisDragScale(true); + _data_selector = new CustomQwtPlotXaxisSelector(_plot->canvas()); + _data_selector->setEnabled(false); +} + +void EnergyCountPeakFitView::setupMenu() +{ + this->setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, &EnergyCountPeakFitView::customContextMenuRequested, [this](const QPoint& pos) { + this->_menu->exec(this->mapToGlobal(pos)); + }); + QAction* action_plot_reset = this->_menu->addAction(QStringLiteral(u"还原")); + action_plot_reset->setObjectName("plot_reset"); + connect(action_plot_reset, &QAction::triggered, [this]() { + this->_plot->ResetPlot(); + }); + this->_menu->addSeparator(); + QAction* action_set_curve_show = this->_menu->addAction(QStringLiteral(u"选择曲线")); + action_set_curve_show->setObjectName("curve_show_setting"); + connect(action_set_curve_show, &QAction::triggered, this, &EnergyCountPeakFitView::onActionCurveShowSetting); + QAction* action_plot_config = this->_menu->addAction(QStringLiteral(u"图表配置")); + action_plot_config->setObjectName("plot_config"); + connect(action_plot_config, &QAction::triggered, this, &EnergyCountPeakFitView::onActionPlotConfigure); +} + +void EnergyCountPeakFitView::loadDataFromFile(const QString &data_name, const QString &filename) +{ + std::string address_str = QString(QStringLiteral(u"能量(KeV)")).toStdString(); + std::string count_str = QString(QStringLiteral(u"计数")).toStdString(); + + io::CSVReader< + 2, + io::trim_chars<' ', '\t'>, + io::double_quote_escape<',', '"'>, + io::throw_on_overflow, + io::empty_line_comment> + reader(QStrToSysPath(filename)); + reader.read_header(io::ignore_extra_column, address_str, count_str); + + double energy; + unsigned long long energy_count; + QVector x, y; + while (reader.read_row(energy, energy_count)) { + x.push_back(energy); + y.push_back(energy_count); + } + // 绘制曲线 + QwtPlotCurve* curve = new QwtPlotCurve(data_name); + curve->setSamples(x, y); + _plot->AddCurve(curve); +} + +void EnergyCountPeakFitView::onActionCurveShowSetting() +{ + if (!_curve_show_setting_dlg) { + _curve_show_setting_dlg = new QDialog(this, Qt::Dialog | Qt::WindowCloseButtonHint); + _curve_show_setting_dlg->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + _curve_show_setting_dlg->setSizeGripEnabled(false); + _curve_show_setting_dlg->setWindowTitle(QString(QStringLiteral(u"选择%1曲线显示").arg(this->_plot->title().text()))); + _curve_show_setting_dlg->setWindowModality(Qt::WindowModal); + _curve_show_setting_dlg->setModal(false); + QVBoxLayout* layout = new QVBoxLayout(_curve_show_setting_dlg); + + QStringList curve_name_list; + for (QwtPlotCurve* curve : this->_plot->GetCurveList()) { + curve_name_list.append(curve->title().text()); + } + // 自动计算多列排布 + int num_columns = std::sqrt(this->_plot->GetCurveList().size()); + if (num_columns == 0) + num_columns = 1; + QVBoxLayout* checkbox_layout = new QVBoxLayout(); + QHBoxLayout* checkbox_column_layout = new QHBoxLayout(); + QMap curve_checkbox_map; + auto addCurveToLayout = [&](const QString& curve_name){ + QwtPlotCurve* curve = this->_plot->GetCurve(curve_name); + QCheckBox* check_box = new QCheckBox(curve->title().text()); + check_box->setChecked(curve->isVisible()); + checkbox_column_layout->addWidget(check_box); + connect(check_box, &QCheckBox::stateChanged, [curve](int state) { + curve->setVisible(state == Qt::Checked); + curve->plot()->replot(); + }); + curve_checkbox_map[curve] = check_box; + if (checkbox_column_layout->count() >= num_columns) { + checkbox_layout->addLayout(checkbox_column_layout); + checkbox_column_layout = new QHBoxLayout(); + } + }; + for (const QString& ch_name : curve_name_list) { + addCurveToLayout(ch_name); + } + if (checkbox_column_layout->count() < num_columns) { + checkbox_column_layout->addStretch(); + } + checkbox_layout->addLayout(checkbox_column_layout); + // 全选和反选 + auto curveCheckboxUpdate = [this, curve_checkbox_map]() { + for (QwtPlotCurve* curve : this->_plot->GetCurveList()) { + curve_checkbox_map[curve]->setChecked(curve->isVisible()); + } + }; + QHBoxLayout* button_layout = new QHBoxLayout(); + QPushButton* btn_all_select = new QPushButton(QString(QStringLiteral(u"全选"))); + connect(btn_all_select, &QPushButton::clicked, [this, curveCheckboxUpdate]() { + for (QwtPlotCurve* curve : this->_plot->GetCurveList()) { + curve->setVisible(true); + } + curveCheckboxUpdate(); + this->_plot->replot(); + }); + button_layout->addWidget(btn_all_select); + QPushButton* btn_reserve_select = new QPushButton(QString(QStringLiteral(u"反选"))); + connect(btn_reserve_select, &QPushButton::clicked, [this, curveCheckboxUpdate]() { + for (QwtPlotCurve* curve : this->_plot->GetCurveList()) { + curve->setVisible(!curve->isVisible()); + } + curveCheckboxUpdate(); + this->_plot->replot(); + }); + button_layout->addWidget(btn_reserve_select); + + layout->addLayout(button_layout); + layout->addLayout(checkbox_layout); + } + _curve_show_setting_dlg->show(); +} + +void EnergyCountPeakFitView::onActionPlotConfigure() +{ + +} \ No newline at end of file diff --git a/src/EnergyCountPeakFitView/EnergyCountPeakFitView.h b/src/EnergyCountPeakFitView/EnergyCountPeakFitView.h new file mode 100644 index 0000000..cf03b47 --- /dev/null +++ b/src/EnergyCountPeakFitView/EnergyCountPeakFitView.h @@ -0,0 +1,38 @@ +#ifndef ENERGYCOUNTPEAKFITVIEW_H +#define ENERGYCOUNTPEAKFITVIEW_H + +#include +#include +#include + +class QMenu; +class CustomQwtPlot; +class CustomQwtPlotXaxisSelector; + +class EnergyCountPeakFitView : public MeasureAnalysisView +{ + Q_OBJECT +public: + EnergyCountPeakFitView(QWidget *parent = nullptr); + virtual ~EnergyCountPeakFitView(); + + virtual void InitViewWorkspace(const QString& project_name) override final; + virtual void SetAnalyzeDataFilename(const QMap& data_files_set); + +private: + void setupPlot(); + void setupMenu(); + void loadDataFromFile(const QString &data_name, const QString& filename); + +private slots: + void onActionCurveShowSetting(); + void onActionPlotConfigure(); + +private: + CustomQwtPlot* _plot = nullptr; + QMenu* _menu = nullptr; + QDialog* _curve_show_setting_dlg = nullptr; + CustomQwtPlotXaxisSelector* _data_selector = nullptr; +}; + +#endif // ENERGYCOUNTPEAKFITVIEW_H diff --git a/src/EnergyCountPlotView/EnergyCountPlotView.cpp b/src/EnergyCountPlotView/EnergyCountPlotView.cpp index f7cb0dd..f13c7cf 100644 --- a/src/EnergyCountPlotView/EnergyCountPlotView.cpp +++ b/src/EnergyCountPlotView/EnergyCountPlotView.cpp @@ -57,8 +57,6 @@ void EnergyCountPlotView::SetAnalyzeDataFilename(const QMap & void EnergyCountPlotView::setupPlot() { - _plot->setTitle(QString(QStringLiteral(u"能量计数谱"))); - _plot->setCanvasBackground(Qt::white); QwtPlotCanvas* canvas = qobject_cast(_plot->canvas()); canvas->setFrameStyle(QFrame::NoFrame); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 27ebfbe..47a43f4 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -120,10 +120,10 @@ void MainWindow::initMainWindow() MeasureAnalysisHistoryForm* measure_analysis_history_form = new MeasureAnalysisHistoryForm; CDockWidget* central_dock_widget = _dock_manager->createDockWidget(QStringLiteral(u"测量分析记录")); central_dock_widget->setWidget(measure_analysis_history_form); - central_dock_widget->setFeature(ads::CDockWidget::AllDockWidgetFeatures, true); + // central_dock_widget->setFeature(ads::CDockWidget::AllDockWidgetFeatures, true); _central_dock_area = _dock_manager->setCentralWidget(central_dock_widget); _action_central_dock_widget = central_dock_widget->toggleViewAction(); - _action_central_dock_widget->setCheckable(false); + // _action_central_dock_widget->setCheckable(false); ui->menu_view->addAction(_action_central_dock_widget); // 构建测量分析工程树视图 diff --git a/src/MeasureAnalysisDataTableView.cpp b/src/MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.cpp similarity index 100% rename from src/MeasureAnalysisDataTableView.cpp rename to src/MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.cpp diff --git a/src/MeasureAnalysisDataTableView.h b/src/MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.h similarity index 100% rename from src/MeasureAnalysisDataTableView.h rename to src/MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.h diff --git a/src/MeasureAnalysisHistoryForm.cpp b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.cpp similarity index 55% rename from src/MeasureAnalysisHistoryForm.cpp rename to src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.cpp index 5752222..3d5cc6e 100644 --- a/src/MeasureAnalysisHistoryForm.cpp +++ b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.cpp @@ -6,9 +6,23 @@ MeasureAnalysisHistoryForm::MeasureAnalysisHistoryForm(QWidget *parent) , ui(new Ui::MeasureAnalysisHistoryForm) { ui->setupUi(this); + connect(ui->btn_query, &QPushButton::clicked, [this](){ + queryHistory(); + }); } MeasureAnalysisHistoryForm::~MeasureAnalysisHistoryForm() { delete ui; } + +void MeasureAnalysisHistoryForm::loadHistoryInfo() +{ + +} + +void MeasureAnalysisHistoryForm::queryHistory() +{ + const QString& query_text = ui->linedit_query->text(); + +} diff --git a/src/MeasureAnalysisHistoryForm.h b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.h similarity index 86% rename from src/MeasureAnalysisHistoryForm.h rename to src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.h index 538d23d..7e2a73c 100644 --- a/src/MeasureAnalysisHistoryForm.h +++ b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.h @@ -15,6 +15,10 @@ public: explicit MeasureAnalysisHistoryForm(QWidget *parent = nullptr); ~MeasureAnalysisHistoryForm(); +private: + void loadHistoryInfo(); + void queryHistory(); + private: Ui::MeasureAnalysisHistoryForm *ui; }; diff --git a/src/MeasureAnalysisHistoryForm.ui b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.ui similarity index 97% rename from src/MeasureAnalysisHistoryForm.ui rename to src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.ui index 6ac0c82..fc5901a 100644 --- a/src/MeasureAnalysisHistoryForm.ui +++ b/src/MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.ui @@ -51,14 +51,14 @@ - + 模糊查询: - + diff --git a/src/MeasureAnalysisTreeView.cpp b/src/MeasureAnalysisTreeView.cpp index f7ca37d..d2d4368 100644 --- a/src/MeasureAnalysisTreeView.cpp +++ b/src/MeasureAnalysisTreeView.cpp @@ -187,6 +187,15 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index) } } } break; + case AnalysisType::EnergyPeakFitView: { + MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); + if (project_model) { + auto all_ch_energy_count_file_name = project_model->GetAllChannelEnergyTotalCountDataFilename(); + if (!all_ch_energy_count_file_name.isEmpty()) { + data_files_set[QStringLiteral(u"测量能谱")] = all_ch_energy_count_file_name; + } + } + } break; case AnalysisType::ParticleInTimeView: { MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); if (project_model) { diff --git a/src/MeasureAnalysisView.cpp b/src/MeasureAnalysisView.cpp index 6811010..b74e5d1 100644 --- a/src/MeasureAnalysisView.cpp +++ b/src/MeasureAnalysisView.cpp @@ -7,6 +7,8 @@ #include "EnergyCountPlotView.h" #include "ParticleTimePoorView.h" #include "ConformityAnalysis.h" +#include "EnergyCountPeakFitView.h" + MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) { MeasureAnalysisView* new_view = nullptr; @@ -72,8 +74,8 @@ MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) new_view->setDeleteOnClose(false); } break; case AnalysisType::EnergyPeakFitView: { - // new_view = new MeasureAnalysisDataTableView; - // new_view->setDeleteOnClose(false); + new_view = new EnergyCountPeakFitView; + new_view->setDeleteOnClose(false); } break; case AnalysisType::NuclideAnalysisView: { // new_view = new MeasureAnalysisDataTableView; diff --git a/src/ParticleCountPlotView/ParticleCountPlotView.cpp b/src/ParticleCountPlotView/ParticleCountPlotView.cpp index 0d1b4d6..c0abf76 100644 --- a/src/ParticleCountPlotView/ParticleCountPlotView.cpp +++ b/src/ParticleCountPlotView/ParticleCountPlotView.cpp @@ -152,8 +152,6 @@ void ParticleCountPlotView::setupMenu() void ParticleCountPlotView::setupPlot() { - _plot->setTitle(QString(QStringLiteral(u"粒子计数谱"))); - _plot->setCanvasBackground(Qt::white); QwtPlotCanvas* canvas = qobject_cast(_plot->canvas()); canvas->setFrameStyle(QFrame::NoFrame); diff --git a/src/src.pro b/src/src.pro index 880b503..e1cce09 100644 --- a/src/src.pro +++ b/src/src.pro @@ -37,28 +37,35 @@ INCLUDEPATH += \ $${PWD}/EnergyCountPlotView \ $${PWD}/CountRateAnalysisView \ $${PWD}/ParticleTimePoorView \ - $${PWD}/ThreeDimensionalConformityAnalysisView + $${PWD}/ThreeDimensionalConformityAnalysisView \ + $${PWD}/EnergyCountPeakFitView \ + $${PWD}/MeasureAnalysisDataTableView \ + $${PWD}/MeasureAnalysisHistoryForm DEPENDPATH += \ $${PWD}/MeasureAnalysisParticleCountPlotView \ $${PWD}/ParticleCountPlotView \ - $${PWD}/ParticleInjectTimeView\ + $${PWD}/ParticleInjectTimeView \ $${PWD}/EnergyCountPlotView \ $${PWD}/CountRateAnalysisView \ $${PWD}/ParticleTimePoorView \ - $${PWD}/ThreeDimensionalConformityAnalysisView + $${PWD}/ThreeDimensionalConformityAnalysisView \ + $${PWD}/EnergyCountPeakFitView \ + $${PWD}/MeasureAnalysisDataTableView \ + $${PWD}/MeasureAnalysisHistoryForm SOURCES += \ AboutDlg.cpp \ CountRateAnalysisView/CountRateAnalysisView.cpp \ CustomQwtPlot.cpp \ DataProcessWorkPool.cpp \ + EnergyCountPeakFitView/EnergyCountPeakFitView.cpp \ EnergyCountPlotView/EnergyCountPlotView.cpp \ EnergyScaleDataModel.cpp \ EnergyScaleForm.cpp \ MainWindow.cpp \ - MeasureAnalysisDataTableView.cpp \ - MeasureAnalysisHistoryForm.cpp \ + MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.cpp \ + MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.cpp \ ParticleCountPlotView/BatchEnergyScaleDialog.cpp \ ParticleCountPlotView/FindPeaksResultDialog.cpp \ ParticleCountPlotView/ParticleCountPlotView.cpp \ @@ -77,6 +84,7 @@ SOURCES += \ ThreeDimensionalConformityAnalysisView/DetectorStatusSummary.cpp \ ThreeDimensionalConformityAnalysisView/ParticleDataStatistics.cpp \ ThreeDimensionalConformityAnalysisView/ThreeDDisplay.cpp \ + EnergyCountPeakFitView/EnergyCountPeakFitView.cpp \ main.cpp HEADERS += \ @@ -85,13 +93,14 @@ HEADERS += \ CountRateAnalysisView/CountRateAnalysisView.h \ CustomQwtPlot.h \ DataProcessWorkPool.h \ + EnergyCountPeakFitView/EnergyCountPeakFitView.h \ EnergyCountPlotView/EnergyCountPlotView.h \ EnergyScaleDataModel.h \ EnergyScaleForm.h \ GlobalDefine.h \ MainWindow.h \ - MeasureAnalysisDataTableView.h \ - MeasureAnalysisHistoryForm.h \ + MeasureAnalysisDataTableView/MeasureAnalysisDataTableView.h \ + MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.h \ ParticleCountPlotView/BatchEnergyScaleDialog.h \ ParticleCountPlotView/FindPeaksResultDialog.h \ ParticleCountPlotView/ParticleCountPlotView.h \ @@ -111,6 +120,7 @@ HEADERS += \ ThreeDimensionalConformityAnalysisView/DetectorStatusSummary.h \ ThreeDimensionalConformityAnalysisView/ParticleDataStatistics.h \ ThreeDimensionalConformityAnalysisView/ThreeDDisplay.h \ + EnergyCountPeakFitView/EnergyCountPeakFitView.h FORMS += \ @@ -118,7 +128,7 @@ FORMS += \ CountRateAnalysisView/CountRateAnalysisView.ui \ EnergyScaleForm.ui \ MainWindow.ui \ - MeasureAnalysisHistoryForm.ui \ + MeasureAnalysisHistoryForm/MeasureAnalysisHistoryForm.ui \ ParticleCountPlotView/BatchEnergyScaleDialog.ui \ MeasureDeviceParamsCfgForm.ui \ NewMeasureAnalysisDlg.ui \