From a61e8d8263e3b0f58b48b9f4f68c3b0f2aafd16b Mon Sep 17 00:00:00 2001 From: anxinglong <2910824064@qq.com> Date: Tue, 24 Mar 2026 15:38:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=B2=92=E5=AD=90=E5=85=A5?= =?UTF-8?q?=E5=B0=84=E6=97=B6=E9=97=B4=E8=A7=86=E5=9B=BE=E7=B1=BB=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ParticleInjectTimeAnalysis.cpp | 140 ++++++++++++++++ .../ParticleInjectTimeAnalysis.h | 48 ++++++ .../ParticleInjectTimeAnalysis.ui | 151 ++++++++++++++++++ src/src.pro | 10 +- 4 files changed, 347 insertions(+), 2 deletions(-) create mode 100644 src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.cpp create mode 100644 src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.h create mode 100644 src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.ui diff --git a/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.cpp b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.cpp new file mode 100644 index 0000000..c6c7498 --- /dev/null +++ b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.cpp @@ -0,0 +1,140 @@ +#include "ParticleInjectTimeAnalysis.h" +#include "ui_ParticleInjectTimeAnalysis.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CustomQwtPlot.h" +#include +ParticleInjectTimeAnalysis::ParticleInjectTimeAnalysis(QWidget *parent) : + MeasureAnalysisView(parent), + ui(new Ui::ParticleInjectTimeAnalysis) +{ + ui->setupUi(this); + InitUi(); + // 获取当前可执行文件的路径 + QString Path = QCoreApplication::applicationDirPath(); + m_AllData = getParticleInjectTimeData(Path + "/data.csv"); + setData(m_AllData); +} + +ParticleInjectTimeAnalysis::~ParticleInjectTimeAnalysis() +{ + delete ui; +} + +void ParticleInjectTimeAnalysis::InitViewWorkspace(const QString &project_name) +{ + +} + +void ParticleInjectTimeAnalysis::SetAnalyzeDataFilename(const QMap &data_files_set) +{ + +} + +void ParticleInjectTimeAnalysis::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); + plot->setAxisTitle(QwtPlot::xBottom, "粒子序号"); + plot->setAxisTitle(QwtPlot::yLeft, "粒子时间"); + + // 刷新绘图 + plot->replot(); + +} + +QVector ParticleInjectTimeAnalysis::getParticleInjectTimeData(QString path) +{ + QVector records; + QFile file(path); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "无法打开文件:" << file.errorString(); + return records; + } + QTextStream stream(&file); + stream.setCodec("UTF-8"); + int lineNumber = 0; + while (!stream.atEnd()) + { + QString line = stream.readLine().trimmed(); + lineNumber++; + + // 跳过空行 + if (line.isEmpty()) + continue; + + // 按逗号分割 + QStringList fields = line.split(','); + + // 检查字段数量是否正确(应该为4) + if (fields.size() != 4) { + qWarning() << "行" << lineNumber << "字段数量不正确,跳过:" << line; + continue; + } + + //获取板卡号通道号 + int bd = fields[0].toInt(); + int ch = fields[1].toInt(); + int detector = bd + ch * 8; + if(detector >= 32) + { + continue; + } + + bool ok; + ParticleInjectTime rec; + rec.index = lineNumber; + rec.dEnergy = fields[2].toDouble(&ok); + if (!ok) { qWarning() << "道址格式错误,行" << rec.dEnergy << lineNumber; continue; } + rec.dTime = fields[3].toLongLong(&ok); + + if (!ok) { qWarning() << "时间计数格式错误,行" << fields[3] << rec.dTime <SetXaxisDragScale(true); + ui->verticalLayout->addWidget(plot); +} diff --git a/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.h b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.h new file mode 100644 index 0000000..c07c394 --- /dev/null +++ b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.h @@ -0,0 +1,48 @@ +#ifndef PARTICLEINJECTTIMEANALYSIS_H +#define PARTICLEINJECTTIMEANALYSIS_H + +#include +#include "qwt.h" +#include "CustomQwtPlot.h" +#include +#include +#include "MeasureAnalysisView.h" + +typedef struct ParticleInjectTime +{ + int bd; + int ch; + double dTime; + int index; + double dEnergy; +} PARTICLEINJECTTIME; + +namespace Ui { +class ParticleInjectTimeAnalysis; +} + +class ParticleInjectTimeAnalysis : public MeasureAnalysisView +{ + Q_OBJECT + +public: + explicit ParticleInjectTimeAnalysis(QWidget *parent = nullptr); + virtual ~ParticleInjectTimeAnalysis(); + + 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(); + +private: + Ui::ParticleInjectTimeAnalysis *ui; + CustomQwtPlot *plot; + QVector m_AllData;//存储的所有的粒子入射时间数据 +}; + +#endif // PARTICLEINJECTTIMEANALYSIS_H diff --git a/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.ui b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.ui new file mode 100644 index 0000000..e9043a7 --- /dev/null +++ b/src/ParticleInjectTimeView/ParticleInjectTimeAnalysis.ui @@ -0,0 +1,151 @@ + + + ParticleInjectTimeAnalysis + + + + 0 + 0 + 997 + 307 + + + + ParticleInjectTimeAnalysis + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 粒子入射设置 + + + + + + + 起始能量: + + + + + + + 50 + + + + + + + KeV + + + + + + + ~ + + + + + + + 终止能量: + + + + + + + 100 + + + + + + + KeV + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 感兴趣区域(ROI)选择 + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + diff --git a/src/src.pro b/src/src.pro index 77e2d59..ddf4a5b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -32,9 +32,11 @@ UI_DIR = $${BUILD_UI}/$${TARGET}/ui INCLUDEPATH += \ $${PWD}/MeasureAnalysisParticleCountPlotView + $${PWD}/ParticleInjectTimeView DEPENDPATH += \ $${PWD}/MeasureAnalysisParticleCountPlotView + $${PWD}/ParticleInjectTimeView SOURCES += \ AboutDlg.cpp \ @@ -57,6 +59,7 @@ SOURCES += \ VirtualTable/SampleDataSource.cpp \ VirtualTable/VirtualTableModel.cpp \ VirtualTable/VirtualTableView.cpp \ + ParticleInjectTimeView/ParticleInjectTimeAnalysis.cpp\ main.cpp HEADERS += \ @@ -82,7 +85,8 @@ HEADERS += \ VirtualTable/DataSource.h \ VirtualTable/SampleDataSource.h \ VirtualTable/VirtualTableModel.h \ - VirtualTable/VirtualTableView.h + VirtualTable/VirtualTableView.h \ + ParticleInjectTimeView/ParticleInjectTimeAnalysis.h FORMS += \ AboutDlg.ui \ @@ -91,5 +95,7 @@ FORMS += \ MeasureAnalysisHistoryForm.ui \ MeasureAnalysisParticleCountPlotView/BatchEnergyScaleDialog.ui \ MeasureDeviceParamsCfgForm.ui \ - NewMeasureAnalysisDlg.ui + NewMeasureAnalysisDlg.ui\ + ParticleInjectTimeView/ParticleInjectTimeAnalysis.ui +