From fb0f34b541532d301c9d938a5280dfbad9557307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B5=B7?= Date: Fri, 27 Mar 2026 19:44:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=B2=92=E5=AD=90=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=B7=AE=E8=A7=86=E5=9B=BE=E4=BB=A3=E7=A0=81=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DataProcessWorkPool.cpp | 3 +- src/MeasureAnalysisTreeView.cpp | 8 +- src/MeasureAnalysisView.cpp | 48 ++-- .../ParticleTimeDifferenceView.cpp | 156 +++++++++++ .../ParticleTimeDifferenceView.h | 40 +++ .../ParticleTimePoorView.cpp | 264 ------------------ .../ParticleTimePoorView.h | 44 --- .../ParticleTimePoorView.ui | 64 ----- src/src.pro | 9 +- 9 files changed, 227 insertions(+), 409 deletions(-) create mode 100644 src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.cpp create mode 100644 src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.h delete mode 100644 src/ParticleTimePoorView/ParticleTimePoorView.cpp delete mode 100644 src/ParticleTimePoorView/ParticleTimePoorView.h delete mode 100644 src/ParticleTimePoorView/ParticleTimePoorView.ui diff --git a/src/DataProcessWorkPool.cpp b/src/DataProcessWorkPool.cpp index b9f6fc0..d7bbb85 100644 --- a/src/DataProcessWorkPool.cpp +++ b/src/DataProcessWorkPool.cpp @@ -762,7 +762,7 @@ bool EnergyScaleParticleDataTask::processTask() out.close(); std::remove(QStrToSysPath(energy_spectrum_filename)); const QString& e_what = QString::fromStdString(e.what()); - LOG_WARN(QStringLiteral(u"能谱数据异常:%1").arg(e_what)); + LOG_WARN(QStringLiteral(u"能谱数据处理异常:%1").arg(e_what)); return false; } const QString& info = QStringLiteral(u"能谱数据处理完成."); @@ -935,4 +935,3 @@ bool EnergyScaleCoincidenceDataTask::processTask() LOG_INFO(info); return true; } - diff --git a/src/MeasureAnalysisTreeView.cpp b/src/MeasureAnalysisTreeView.cpp index 9624da5..0e76c30 100644 --- a/src/MeasureAnalysisTreeView.cpp +++ b/src/MeasureAnalysisTreeView.cpp @@ -224,7 +224,7 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index) if (project_model) { auto file_name = project_model->GetAllChannelParticleDataFilename(); if ( !file_name.isEmpty() ) { - data_files_set[QStringLiteral(u"粒子时间差")] = file_name; + data_files_set[QStringLiteral(u"粒子数据")] = file_name; } } } break; @@ -241,11 +241,7 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index) MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); if (project_model) { QString file_name = project_model->GetMeasureDeviceParamsCfgFilename(); - if (!file_name.isEmpty()) { - data_files_set[QStringLiteral(u"设备参数配置")] = file_name; - } else { - data_files_set[QStringLiteral(u"设备参数配置")] = QString(""); - } + data_files_set[QStringLiteral(u"设备参数配置")] = file_name; } } break; default: diff --git a/src/MeasureAnalysisView.cpp b/src/MeasureAnalysisView.cpp index bd2cb87..a2ba4ec 100644 --- a/src/MeasureAnalysisView.cpp +++ b/src/MeasureAnalysisView.cpp @@ -1,15 +1,16 @@ #include "MeasureAnalysisView.h" -#include +#include "ConformityAnalysis.h" +#include "CountRateAnalysisView.h" +#include "DeviceConfigView.h" +#include "EnergyCountPeakFitView.h" +#include "EnergyCountPlotView.h" #include "MeasureAnalysisDataTableView.h" #include "ParticleCountPlotView.h" #include "ParticleInjectTimeAnalysisView.h" -#include "CountRateAnalysisView.h" -#include "EnergyCountPlotView.h" -#include "ParticleTimePoorView.h" -#include "ConformityAnalysis.h" -#include "EnergyCountPeakFitView.h" -#include "DeviceConfigView.h" -MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) +#include "ParticleTimeDifferenceView.h" +#include + +MeasureAnalysisView* MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) { MeasureAnalysisView* new_view = nullptr; switch (view_type) { @@ -18,8 +19,8 @@ MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) // new_view->setDeleteOnClose(true); } break; case AnalysisType::DeviceParamsCfg: { - new_view = new DeviceConfigView; - new_view->setDeleteOnClose(true); + new_view = new DeviceConfigView; + new_view->setDeleteOnClose(true); } break; case AnalysisType::EnergyScale: { // new_view = new MeasureAnalysisDataTableView; @@ -66,12 +67,12 @@ MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) // new_view->setDeleteOnClose(false); } break; case AnalysisType::CoincidenceParticleEnergySpectrum3DView: { - new_view = new ConformityAnalysis; - new_view->setDeleteOnClose(false); + new_view = new ConformityAnalysis; + new_view->setDeleteOnClose(false); } break; case AnalysisType::CountingRateView: { - new_view = new CountRateAnalysisView; - new_view->setDeleteOnClose(false); + new_view = new CountRateAnalysisView; + new_view->setDeleteOnClose(false); } break; case AnalysisType::EnergyPeakFitView: { new_view = new EnergyCountPeakFitView; @@ -86,8 +87,8 @@ MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) new_view->setDeleteOnClose(false); } break; case AnalysisType::ParticleTimeDiffView: { - new_view = new ParticleTimePoorView; - new_view->setDeleteOnClose(false); + new_view = new ParticleTimeDifferenceView; + new_view->setDeleteOnClose(false); } break; case AnalysisType::CoincidenceEventTimeView: { // new_view = new MeasureAnalysisParticleCountPlotView; @@ -104,7 +105,7 @@ MeasureAnalysisView *MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) default: break; } - if ( new_view ) { + if (new_view) { new_view->setAnalyzeType(view_type); } return new_view; @@ -116,12 +117,12 @@ MeasureAnalysisView::MeasureAnalysisView(QWidget* parent) _analysis_type = AnalysisType::None; } -void MeasureAnalysisView::SetProjectName(const QString &project_name) +void MeasureAnalysisView::SetProjectName(const QString& project_name) { _project_name = project_name; } -const QString &MeasureAnalysisView::GetProjectName() const +const QString& MeasureAnalysisView::GetProjectName() const { return _project_name; } @@ -141,22 +142,22 @@ MeasureAnalysisView::ViewType MeasureAnalysisView::GetViewType() return _view_type; } -void MeasureAnalysisView::SetViewName(const QString &name) +void MeasureAnalysisView::SetViewName(const QString& name) { this->_name = name; } -void MeasureAnalysisView::SetViewDescription(const QString &description) +void MeasureAnalysisView::SetViewDescription(const QString& description) { this->_description = description; } -const QString &MeasureAnalysisView::GetViewName() const +const QString& MeasureAnalysisView::GetViewName() const { return this->_name; } -const QString &MeasureAnalysisView::GetViewDescription() const +const QString& MeasureAnalysisView::GetViewDescription() const { return this->_description; } @@ -185,4 +186,3 @@ QDataStream& operator>>(QDataStream& in, MeasureAnalysisView& view) { return in; } - diff --git a/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.cpp b/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.cpp new file mode 100644 index 0000000..c2fcf93 --- /dev/null +++ b/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.cpp @@ -0,0 +1,156 @@ +#include "ParticleTimeDifferenceView.h" +#include "CustomQwtPlot.h" +#include "csv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +ParticleTimeDifferenceView::ParticleTimeDifferenceView(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(); +} + +ParticleTimeDifferenceView::~ParticleTimeDifferenceView() +{ + LOG_DEBUG(QStringLiteral(u"%1析构.").arg(this->GetViewName())); +} + +void ParticleTimeDifferenceView::InitViewWorkspace(const QString &project_name) +{ + Q_UNUSED(project_name); +} + +void ParticleTimeDifferenceView::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 ParticleTimeDifferenceView::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"时间(ns)"); + 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); + + _plot->SetXaxisDragScale(true); + _data_selector = new CustomQwtPlotXaxisSelector(_plot->canvas()); + _data_selector->setEnabled(false); + + _histogram = new QwtPlotHistogram("粒子时间差分布"); + _histogram->setStyle(QwtPlotHistogram::Columns); + _histogram->attach(_plot); +} + +void ParticleTimeDifferenceView::setupMenu() +{ + this->setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, &ParticleTimeDifferenceView::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_plot_config = this->_menu->addAction(QStringLiteral(u"图表配置")); + action_plot_config->setObjectName("plot_config"); + connect(action_plot_config, &QAction::triggered, this, &ParticleTimeDifferenceView::onActionPlotConfigure); +} + +void ParticleTimeDifferenceView::loadDataFromFile(const QString &data_name, const QString &filename) +{ + try { + std::string board_id_str = QString(QStringLiteral(u"板卡号")).toStdString(); + std::string channel_id_str = QString(QStringLiteral(u"通道号")).toStdString(); + std::string address_str = QString(QStringLiteral(u"道址")).toStdString(); + std::string time_str = QString(QStringLiteral(u"时间计数")).toStdString(); + + io::CSVReader< + 4, + 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, board_id_str, channel_id_str, address_str, time_str); + + QMap hist_map; + uint board_id, channel_id, address; + unsigned long long time1 = 0, time2; + while (reader.read_row(board_id, channel_id, address, time2)) { + if (time1 == 0) { + time1 = time2; + continue; + } + unsigned long long d_time = time2 - time1; + double bin = floor(d_time / _bin_width) * _bin_width; + hist_map[bin]++; + time1 = time2; + } + unsigned long long max_count = 1; + QVector samples; + for (const double& bin : hist_map.keys()) { + const unsigned long long& count = hist_map.value(bin); + samples.append(QwtIntervalSample(count, bin, bin + _bin_width)); + if ( max_count < count ) { + max_count = count; + } + } + _histogram->setData(new QwtIntervalSeriesData(samples)); + _plot->replot(); + const QString& info = QStringLiteral(u"能谱数据处理完成."); + LOG_INFO(info); + } catch (const std::exception& e) { + const QString& e_what = QString::fromStdString(e.what()); + LOG_WARN(QStringLiteral(u"能谱数据异常:%1").arg(e_what)); + } +} + +void ParticleTimeDifferenceView::onActionPlotConfigure() +{ + +} \ No newline at end of file diff --git a/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.h b/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.h new file mode 100644 index 0000000..fb321b8 --- /dev/null +++ b/src/ParticleTimeDifferenceView/ParticleTimeDifferenceView.h @@ -0,0 +1,40 @@ +#ifndef PARTICLETIMEDIFFERENCEVIEW_H +#define PARTICLETIMEDIFFERENCEVIEW_H + +#include +#include +#include + +class QMenu; +class CustomQwtPlot; +class CustomQwtPlotXaxisSelector; +class QwtPlotHistogram; + +class ParticleTimeDifferenceView : public MeasureAnalysisView +{ + Q_OBJECT +public: + ParticleTimeDifferenceView(QWidget *parent = nullptr); + virtual ~ParticleTimeDifferenceView(); + + 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 onActionPlotConfigure(); + +private: + CustomQwtPlot* _plot = nullptr; + QMenu* _menu = nullptr; + QDialog* _curve_show_setting_dlg = nullptr; + CustomQwtPlotXaxisSelector* _data_selector = nullptr; + double _bin_width = 50.0f; + QwtPlotHistogram* _histogram = nullptr; +}; + +#endif // PARTICLETIMEDIFFERENCEVIEW_H diff --git a/src/ParticleTimePoorView/ParticleTimePoorView.cpp b/src/ParticleTimePoorView/ParticleTimePoorView.cpp deleted file mode 100644 index 7e39ef3..0000000 --- a/src/ParticleTimePoorView/ParticleTimePoorView.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "ParticleTimePoorView.h" -#include "ui_ParticleTimePoorView.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "CustomQwtPlot.h" -#include -#include -#include -#include -ParticleTimePoorView::ParticleTimePoorView(QWidget *parent) : - MeasureAnalysisView(parent), - ui(new Ui::ParticleTimePoorView) -{ - ui->setupUi(this); - this->setViewType(PlotFrame); - - InitUi(); - -} - -ParticleTimePoorView::~ParticleTimePoorView() -{ - delete ui; -} - -void ParticleTimePoorView::InitViewWorkspace(const QString &project_name) -{ - -} -void ParticleTimePoorView::SetAnalyzeDataFilename(const QMap &data_files_set) -{ - if (data_files_set.isEmpty()) { - LOG_WARN("文件集合为空"); - return; - } - - QString filePath = data_files_set.first().toString(); - LOG_INFO("读取文件: " + filePath); - - io::CSVReader<4> in(QStrToSysPath(filePath)); - in.read_header(io::ignore_extra_column, "板卡号", "通道号", "道址", "时间计数"); - - int board, channel; - double energy, time_count; - QVector timestamps; - - while (in.read_row(board, channel, energy, time_count)) { - timestamps.append(static_cast(time_count / 1e9)); - } - if (timestamps.size() < 2) { - qDebug() << "数据不足,无法计算时间差"; - return; - } - - // 1. 统计时间差分布 - const int nNs = 1; // 分组宽度 - QMap mapVal; - for (int i = 0; i < timestamps.size() - 1; ++i) { - uint64_t diff = timestamps[i+1] - timestamps[i]; - if(diff >= 1 ) - { - qDebug()< histogramData; - double xMin = 0.0, xMax = 0.0; // 用于记录实际数据的最小/最大 x 值 - int nmaxy = 0; - QMap::iterator it = mapVal.begin(); - for (; it != mapVal.end(); ++it) { - uint64_t binIndex = it.key(); - int count = it.value(); - - double center = binIndex * nNs + nNs / 2.0; - double halfWidth = (nNs - 1) / 2.0; - double left = center - halfWidth; - double right = center + halfWidth; - - if (left < xMin) xMin = left; - if (right > xMax) xMax = right; - - QwtInterval interval(left, right); - histogramData.append(QwtIntervalSample(count, interval)); - - if (count > nmaxy) nmaxy = count; - } - - // 3. 创建直方图 - QwtPlotHistogram* histogram = new QwtPlotHistogram(); - histogram->setSamples(histogramData); // 注意:QwtPlotHistogram 使用 setData() - histogram->setBrush(QBrush(QColor(23, 229, 238))); - histogram->setStyle(QwtPlotHistogram::Columns); - histogram->attach(plot); - m_histogram = histogram; // 保存指针以便后续动态调整 y 轴 - - // ========== 修改后的 x 轴范围设置 ========== - const double MAX_DISPLAY_TIME = 5000.0; // 最大显示时间差 (ns),可根据需求调整 - - // 确保 xMin 不为负 - if (xMin < 0.0) xMin = 0.0; - // x 轴显示上限:取实际数据最大值和 MAX_DISPLAY_TIME 的最小值 - double xDisplayMax = qMin(xMax, MAX_DISPLAY_TIME); - // 如果实际数据最大值小于最大显示上限,则使用实际最大值;否则使用限制值 - if (xDisplayMax <= xMin) xDisplayMax = xMin + 1.0; // 防止空范围 - - plot->setAxisScale(QwtPlot::xBottom, xMin, xDisplayMax); - plot->setAxisScale(QwtPlot::yLeft, 0, nmaxy * 1.05); - // ========================================== - - // 4. 启用水平拖拽 - QwtPlotPanner* panner = new QwtPlotPanner(plot->canvas()); - panner->setAxisEnabled(QwtPlot::yLeft, false); - panner->setAxisEnabled(QwtPlot::xBottom, true); - - // 获取 x 轴的 QwtScaleWidget - QwtScaleWidget* xAxisWidget = plot->axisWidget(QwtPlot::xBottom); - if (xAxisWidget) { - // 连接 x 轴的 scaleDivChanged 信号(无参版本) - connect(xAxisWidget, &QwtScaleWidget::scaleDivChanged, this, - [this]() { - if (m_histogram) { - // 获取当前 x 轴范围 - const QwtScaleDiv& scaleDiv = plot->axisScaleDiv(QwtPlot::xBottom); - double min = scaleDiv.lowerBound(); - double max = scaleDiv.upperBound(); - - // 计算当前 x 可见范围内的最大计数值 - double maxY = 0.0; - const QwtSeriesData* data = m_histogram->data(); - if (data) { - for (int i = 0; i < data->size(); ++i) { - QwtIntervalSample sample = data->sample(i); - if (sample.interval.intersects(QwtInterval(min, max))) { - if (sample.value > maxY) - maxY = sample.value; - } - } - } - if (maxY == 0.0) maxY = 1.0; - plot->setAxisScale(QwtPlot::yLeft, 0, maxY * 1.05); - plot->replot(); - } - }); - } - - // 6. 设置轴标题 - plot->setAxisTitle(QwtPlot::xBottom, QStringLiteral(u"时间差 (ns)")); - plot->setAxisTitle(QwtPlot::yLeft, QStringLiteral(u"粒子计数")); - - plot->replot(); - LOG_INFO("直方图已添加并刷新"); -} - -void ParticleTimePoorView::setData(QVector data) -{ -// int energyStart = ui->label_energyStart->text().toInt(); -// int energyEnd = ui->label_energyEnd->text().toInt(); - -// QVector x; -// QVector y; - -// double minValue = 0; -// double maxValue = 0; -// for(auto info : data) -// { -// if(info.dEnergy <= energyStart || info.dEnergy >= energyEnd) -// { -// continue; -// } -// x.append(info.index); -// y.append(info.dTime); -// minValue = qMin(minValue, info.dTime); -// maxValue = qMax(maxValue, info.dTime); -// } - -// // 创建曲线并设置数据 -// QwtPlotCurve *curve = new QwtPlotCurve(); -// curve->setSamples(x, y); -// // 将曲线添加到 CustomQwtPlot 中(会自动分配颜色) -// plot->AddCurve(curve); -// // 设置坐标轴范围和标题 -//// plot->setAxisScale(QwtPlot::xBottom, 0, x.last()); -//// plot->setAxisScale(QwtPlot::yLeft,minValue , maxValue); - -// LOG_INFO(QStringLiteral(u"%1数据读取完毕.").arg(this->GetViewName())); - -// // 刷新绘图 -// plot->replot(); - -} - -QVector ParticleTimePoorView::getParticleInjectTimeData(QString path) -{ - QVector records; - - io::CSVReader<4> in(QStrToSysPath(path)); - in.read_header(io::ignore_extra_column, "板卡号", "通道号", "能量(KeV)", "时间计数"); - - int board, channel; - double energy, time_count; - int lineNumber = 0; - - // 逐行读取 - while (in.read_row(board, channel, energy, time_count)) - { - int detector = board + channel * 8; - lineNumber++; - if(detector >= 32) - { - continue; - } - ParticleInjectTime rec; - rec.index = lineNumber; - rec.dEnergy = energy; - rec.dTime = time_count; - records.append(rec); - } - return records; -} - -void ParticleTimePoorView::InitUi() -{ - plot = new CustomQwtPlot(); - plot->SetXaxisDragScale(true); - setupPlot(); - ui->verticalLayout_2->addWidget(plot); -} - -void ParticleTimePoorView::setupPlot() -{ - plot->setCanvasBackground(Qt::white); - QwtPlotCanvas* canvas = qobject_cast(plot->canvas()); - canvas->setFrameStyle(QFrame::NoFrame); - - plot->setAxisTitle(QwtPlot::xBottom, QStringLiteral(u"粒子计数")); - plot->setAxisTitle(QwtPlot::yLeft, QStringLiteral(u"时间差")); - // 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); -} diff --git a/src/ParticleTimePoorView/ParticleTimePoorView.h b/src/ParticleTimePoorView/ParticleTimePoorView.h deleted file mode 100644 index ff73490..0000000 --- a/src/ParticleTimePoorView/ParticleTimePoorView.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef PARTICLETIMEPOORVIEW_H -#define PARTICLETIMEPOORVIEW_H - -#include -#include "qwt.h" -#include "CustomQwtPlot.h" -#include -#include -#include "MeasureAnalysisView.h" -#include "csv.h" -#include - - -namespace Ui { -class ParticleTimePoorView; -} - -class ParticleTimePoorView : public MeasureAnalysisView -{ - Q_OBJECT - -public: - explicit ParticleTimePoorView(QWidget *parent = nullptr); - virtual ~ParticleTimePoorView(); - - virtual void InitViewWorkspace(const QString& project_name) override final; - virtual void SetAnalyzeDataFilename(const QMap& data_files_set); - - void setData(QVector data); - - //获取数据 - QVector getParticleInjectTimeData(QString path); -private: - void InitUi(); - void setupPlot(); - -private: - Ui::ParticleTimePoorView *ui; - CustomQwtPlot *plot; - QVector m_AllData;//存储的所有的粒子入射时间数据 - QwtPlotHistogram* m_histogram; -}; - -#endif // PARTICLEINJECTTIMEANALYSIS_H diff --git a/src/ParticleTimePoorView/ParticleTimePoorView.ui b/src/ParticleTimePoorView/ParticleTimePoorView.ui deleted file mode 100644 index 13e5cdd..0000000 --- a/src/ParticleTimePoorView/ParticleTimePoorView.ui +++ /dev/null @@ -1,64 +0,0 @@ - - - ParticleTimePoorView - - - - 0 - 0 - 997 - 307 - - - - ParticleInjectTimeAnalysis - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - diff --git a/src/src.pro b/src/src.pro index 131cbbb..4ed9271 100644 --- a/src/src.pro +++ b/src/src.pro @@ -36,10 +36,10 @@ INCLUDEPATH += \ $${PWD}/ParticleInjectTimeView \ $${PWD}/EnergyCountPlotView \ $${PWD}/CountRateAnalysisView \ - $${PWD}/ParticleTimePoorView \ $${PWD}/ThreeDimensionalConformityAnalysisView \ $${PWD}/EnergyCountPeakFitView \ $${PWD}/MeasureAnalysisDataTableView \ + $${PWD}/ParticleTimeDifferenceView \ $${PWD}/MeasureAnalysisHistoryForm \ $${PWD}/DeviceParameterConfig @@ -50,10 +50,10 @@ DEPENDPATH += \ $${PWD}/ParticleInjectTimeView \ $${PWD}/EnergyCountPlotView \ $${PWD}/CountRateAnalysisView \ - $${PWD}/ParticleTimePoorView \ $${PWD}/ThreeDimensionalConformityAnalysisView \ $${PWD}/EnergyCountPeakFitView \ $${PWD}/MeasureAnalysisDataTableView \ + $${PWD}/ParticleTimeDifferenceView \ $${PWD}/MeasureAnalysisHistoryForm \ $${PWD}/DeviceParameterConfig @@ -82,11 +82,11 @@ SOURCES += \ NewMeasureAnalysisDlg.cpp \ MeasureAnalysisProjectModel.cpp \ ParticleInjectTimeView/ParticleInjectTimeAnalysisView.cpp \ + ParticleTimeDifferenceView/ParticleTimeDifferenceView.cpp \ VirtualTable/CsvDataSource.cpp \ VirtualTable/SampleDataSource.cpp \ VirtualTable/VirtualTableModel.cpp \ VirtualTable/VirtualTableView.cpp \ - ParticleTimePoorView/ParticleTimePoorView.cpp \ ThreeDimensionalConformityAnalysisView/ConformityAnalysis.cpp \ ThreeDimensionalConformityAnalysisView/DetectorStatusSummary.cpp \ ThreeDimensionalConformityAnalysisView/ParticleDataStatistics.cpp \ @@ -121,12 +121,12 @@ HEADERS += \ NewMeasureAnalysisDlg.h \ MeasureAnalysisProjectModel.h \ ParticleInjectTimeView/ParticleInjectTimeAnalysisView.h \ + ParticleTimeDifferenceView/ParticleTimeDifferenceView.h \ VirtualTable/CsvDataSource.h \ VirtualTable/DataSource.h \ VirtualTable/SampleDataSource.h \ VirtualTable/VirtualTableModel.h \ VirtualTable/VirtualTableView.h\ - ParticleTimePoorView/ParticleTimePoorView.h \ ThreeDimensionalConformityAnalysisView/ConformityAnalysis.h \ ThreeDimensionalConformityAnalysisView/DetectorStatusSummary.h \ ThreeDimensionalConformityAnalysisView/ParticleDataStatistics.h \ @@ -146,7 +146,6 @@ FORMS += \ MeasureDeviceParamsCfgForm.ui \ NewMeasureAnalysisDlg.ui \ ParticleInjectTimeView/ParticleInjectTimeAnalysisView.ui\ - ParticleTimePoorView/ParticleTimePoorView.ui \ ThreeDimensionalConformityAnalysisView/DetectorStatusSummary.ui \ ThreeDimensionalConformityAnalysisView/ParticleDataStatistics.ui \ ThreeDimensionalConformityAnalysisView/ThreeDDisplay.ui \