效率刻度同步至项目中,增加导出测量分析数据

This commit is contained in:
anxinglong 2026-07-31 17:28:55 +08:00
parent 944b2d2444
commit 9d433baf32
8 changed files with 439 additions and 7 deletions

View File

@ -20,7 +20,7 @@
EfficiencyScale::EfficiencyScale(QWidget *parent) EfficiencyScale::EfficiencyScale(QWidget *parent)
: QDialog(parent) : MeasureAnalysisView(parent)
, ui(new Ui::EfficiencyScale) , ui(new Ui::EfficiencyScale)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -82,6 +82,7 @@ EfficiencyScale::~EfficiencyScale()
delete ui; delete ui;
} }
void EfficiencyScale::setupPlot() void EfficiencyScale::setupPlot()
{ {
_plot->setCanvasBackground(Qt::white); _plot->setCanvasBackground(Qt::white);
@ -854,3 +855,32 @@ void EfficiencyScale::on_pBtn_Delete_File_clicked()
QStringLiteral(u"删除失败:%1").arg(filePath)); QStringLiteral(u"删除失败:%1").arg(filePath));
} }
} }
void EfficiencyScale::InitViewWorkspace(const QString &project_name)
{
}
void EfficiencyScale::SetAnalyzeDataFilename(const QMap<QString, QVariant> &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();
QFileInfo info(data_filename);
QDir dir = info.dir();
if (QFileInfo(data_filename).exists()) {
ui->groupBox_7->hide();
QFileInfo fileInfo(data_filename);
QString baseName =QString("[%1]%2").arg(dir.dirName()).arg(fileInfo.baseName());
ui->lineEdit_name->setText(baseName);
ui->lineEdit_name->setReadOnly(true);
ui->groupBox_5->hide();
ui->pBtn_SaveAs->setText(QStringLiteral(u"保存到系统"));
m_currentFilePath = data_filename;
QString errorMsg;
loadFromJsonFile(data_filename);
on_comboBox_channel_currentIndexChanged(0);
}
}
}

View File

@ -8,6 +8,7 @@
#include <QMap> #include <QMap>
#include <QVector> #include <QVector>
#include <QPointF> #include <QPointF>
#include <MeasureAnalysisView.h>
namespace Ui { namespace Ui {
class EfficiencyScale; class EfficiencyScale;
@ -57,14 +58,15 @@ struct ChannelEfficiencyData
ChannelEfficiencyData() : inflectionEnergy(0.0) {} ChannelEfficiencyData() : inflectionEnergy(0.0) {}
}; };
class EfficiencyScale : public QDialog class EfficiencyScale : public MeasureAnalysisView
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit EfficiencyScale(QWidget *parent = nullptr); explicit EfficiencyScale(QWidget *parent = nullptr);
~EfficiencyScale(); ~EfficiencyScale();
virtual void InitViewWorkspace(const QString& project_name) override final;
virtual void SetAnalyzeDataFilename(const QMap<QString, QVariant>& data_files_set);
private: private:
void setupPlot(); void setupPlot();
//加载能量刻度文件夹下所有的文件 //加载能量刻度文件夹下所有的文件

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>EfficiencyScale</class> <class>EfficiencyScale</class>
<widget class="QDialog" name="EfficiencyScale"> <widget class="QWidget" name="EfficiencyScale">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>

View File

@ -11,6 +11,15 @@
#include <QScrollBar> #include <QScrollBar>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QGroupBox>
#include <QCheckBox>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include "DockAreaWidget.h" #include "DockAreaWidget.h"
#include "DockComponentsFactory.h" #include "DockComponentsFactory.h"
#include "DockManager.h" #include "DockManager.h"
@ -459,6 +468,7 @@ void MainWindow::initAction()
} }
} }
}); });
} }
void MainWindow::initStatusBar() void MainWindow::initStatusBar()
@ -965,6 +975,359 @@ void MainWindow::on_action_efficiency_scale_mrg_triggered()
// QHBoxLayout* hlayout = new QHBoxLayout; // QHBoxLayout* hlayout = new QHBoxLayout;
// hlayout->addWidget(efficiency_scale_mrg_form); // hlayout->addWidget(efficiency_scale_mrg_form);
// efficiency_scale_mrg_form.setLayout(hlayout); // efficiency_scale_mrg_form.setLayout(hlayout);
efficiency_scale_mrg_form->exec(); efficiency_scale_mrg_form->show();
} }
void MainWindow::on_action_output_measurement_analysis_triggered()
{
MeasureAnalysisProjectModel* project_model = ProjectList::Instance()->GetCurrentProjectModel();
if (project_model == nullptr) {
QMessageBox::information(this, QStringLiteral(u"提示"), QStringLiteral(u"请先新建或打开测量分析项目!"));
return;
}
const QString& project_name = project_model->GetProjectName();
const QString& project_dir = project_model->GetProjectDir();
// 构建导出选择对话框
QDialog dlg(this);
dlg.setWindowTitle(QStringLiteral(u"导出测量分析数据"));
dlg.setMinimumWidth(320);
QVBoxLayout* main_layout = new QVBoxLayout(&dlg);
// 项目信息标签
QLabel* info_label = new QLabel(QStringLiteral(u"当前项目:%1").arg(project_name), &dlg);
info_label->setStyleSheet("font-weight:bold; padding:4px;");
main_layout->addWidget(info_label);
main_layout->addWidget(new QLabel(QStringLiteral(u"请选择要导出的数据类别:"), &dlg));
// 全选/全不选按钮
QHBoxLayout* btn_layout = new QHBoxLayout;
QPushButton* btn_select_all = new QPushButton(QStringLiteral(u"全选"), &dlg);
QPushButton* btn_select_none = new QPushButton(QStringLiteral(u"全不选"), &dlg);
btn_layout->addWidget(btn_select_all);
btn_layout->addWidget(btn_select_none);
btn_layout->addStretch();
main_layout->addLayout(btn_layout);
// 复选框列表
QCheckBox* chk_readme = new QCheckBox(QStringLiteral(u"导出说明文件(项目信息+目录说明)"), &dlg);
QCheckBox* chk_particle = new QCheckBox(QStringLiteral(u"原始粒子数据"), &dlg);
QCheckBox* chk_addr_count = new QCheckBox(QStringLiteral(u"道址计数"), &dlg);
QCheckBox* chk_energy_count = new QCheckBox(QStringLiteral(u"能量计数"), &dlg);
QCheckBox* chk_spectrum = new QCheckBox(QStringLiteral(u"能谱数据(粒子能量数据)"), &dlg);
QCheckBox* chk_conform = new QCheckBox(QStringLiteral(u"符合数据"), &dlg);
QCheckBox* chk_anti_conform = new QCheckBox(QStringLiteral(u"反符合数据"), &dlg);
QCheckBox* chk_scale = new QCheckBox(QStringLiteral(u"刻度配置数据"), &dlg);
// 默认全选
chk_readme->setChecked(true);
chk_particle->setChecked(true);
chk_addr_count->setChecked(true);
chk_energy_count->setChecked(true);
chk_spectrum->setChecked(true);
chk_conform->setChecked(true);
chk_anti_conform->setChecked(true);
chk_scale->setChecked(true);
QList<QCheckBox*> all_checkboxes = {
chk_readme, chk_particle, chk_addr_count, chk_energy_count,
chk_spectrum, chk_conform, chk_anti_conform, chk_scale
};
QGroupBox* group_box = new QGroupBox(QStringLiteral(u"导出数据类别"), &dlg);
QVBoxLayout* group_layout = new QVBoxLayout(group_box);
for (auto cb : all_checkboxes) {
group_layout->addWidget(cb);
}
main_layout->addWidget(group_box);
// 全选/全不选 槽连接
connect(btn_select_all, &QPushButton::clicked, [&](){
for (auto cb : all_checkboxes) cb->setChecked(true);
});
connect(btn_select_none, &QPushButton::clicked, [&](){
for (auto cb : all_checkboxes) cb->setChecked(false);
});
// 确定/取消按钮
QDialogButtonBox* button_box = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dlg);
connect(button_box, &QDialogButtonBox::accepted, &dlg, &QDialog::accept);
connect(button_box, &QDialogButtonBox::rejected, &dlg, &QDialog::reject);
main_layout->addWidget(button_box);
// 弹出选择对话框
if (dlg.exec() != QDialog::Accepted) {
return;
}
// 检查是否有选中项
bool has_selection = false;
for (auto cb : all_checkboxes) {
if (cb->isChecked()) { has_selection = true; break; }
}
if (!has_selection) {
QMessageBox::information(this, QStringLiteral(u"提示"), QStringLiteral(u"请至少选择一项要导出的数据!"));
return;
}
// 选择导出目录
QString default_export_dir = QDir::homePath();
QString export_root_dir = QFileDialog::getExistingDirectory(
this,
QStringLiteral(u"选择导出目录"),
default_export_dir,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
);
if (export_root_dir.isEmpty()) {
return;
}
// 在导出目录下创建以项目名命名的子目录
QString export_dir = QDir(export_root_dir).filePath(project_name + QStringLiteral(u"_导出数据"));
QDir export_qdir(export_dir);
if (!export_qdir.mkpath(export_dir)) {
QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"创建导出目录失败:%1").arg(export_dir));
return;
}
int export_count = 0;
QStringList export_log;
// 复制单个文件到目标目录,返回是否成功
auto copyFileToDir = [&](const QString& src_file, const QString& dst_dir, const QString& dst_filename = QString()) -> bool {
if (src_file.isEmpty() || !QFile::exists(src_file)) {
return false;
}
QDir().mkpath(dst_dir);
QString dst_name = dst_filename.isEmpty() ? QFileInfo(src_file).fileName() : dst_filename;
QString dst_path = QDir(dst_dir).filePath(dst_name);
if (QFile::exists(dst_path)) {
QFile::remove(dst_path);
}
bool ok = QFile::copy(src_file, dst_path);
if (ok) {
export_count++;
export_log << QStringLiteral(u" ✓ %1").arg(dst_name);
}
return ok;
};
// 批量复制目录中的文件
auto copyFileMapToDir = [&](const QMap<uint, QString>& file_map, const QString& dst_dir, const QString& name_prefix) -> int {
int count = 0;
QList<uint> keys = file_map.keys();
qSort(keys.begin(), keys.end());
for (uint ch : keys) {
const QString& src_file = file_map.value(ch);
QString dst_name = QStringLiteral(u"%1%2.csv").arg(name_prefix).arg(ch);
if (copyFileToDir(src_file, dst_dir, dst_name)) {
count++;
}
}
return count;
};
//导出说明文件
if (chk_readme->isChecked()) {
QString sub_dir = export_dir;
export_log << QStringLiteral(u"[导出说明]");
QString readme_path = QDir(sub_dir).filePath(QStringLiteral(u"导出说明.txt"));
QFile readme_file(readme_path);
if (readme_file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) {
QTextStream out(&readme_file);
out.setCodec("UTF-8");
out << QStringLiteral(u"========================================\n");
out << QStringLiteral(u" 测量分析数据导出报告\n");
out << QStringLiteral(u"========================================\n\n");
out << QStringLiteral(u"项目名称:%1\n").arg(project_name);
out << QStringLiteral(u"导出时间:%1\n").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
out << QStringLiteral(u"项目目录:%1\n").arg(project_dir);
out << QStringLiteral(u"设备GUID%1\n").arg(project_model->GetDeviceGuid());
out << QStringLiteral(u"开始时间:%1\n").arg(project_model->GetStartTime());
out << QStringLiteral(u"结束时间:%1\n").arg(project_model->GetEndTime());
out << QStringLiteral(u"预设时间:%1 秒\n").arg(project_model->GetMeasurePresetTime());
out << QStringLiteral(u"符合时间窗:%1 ns\n").arg(project_model->GetConformTimeWin());
out << QStringLiteral(u"测量状态:%1\n").arg(project_model->GetIsMeasureComplete() ? QStringLiteral(u"已完成") : QStringLiteral(u"未完成"));
out << QStringLiteral(u"\n----------------------------------------\n");
out << QStringLiteral(u" 目录结构说明\n");
out << QStringLiteral(u"----------------------------------------\n");
out << QStringLiteral(u"01_原始粒子数据/ — 全通道粒子原始数据(板卡号,通道号,道址,时间计数)\n");
out << QStringLiteral(u"02_道址计数/ — 各通道道址计数谱(道址,计数)\n");
out << QStringLiteral(u"03_能量计数/ — 各通道能量计数谱能量KeV,计数)\n");
out << QStringLiteral(u"04_能谱数据/ — 粒子能量数据(板卡号,通道号,道址,能量KeV,时间计数)\n");
out << QStringLiteral(u"05_符合数据/ — 符合事件数据(粒子符合 + 能量符合)\n");
out << QStringLiteral(u"06_反符合数据/ — 反符合事件数据(粒子反符合 + 能量反符合)\n");
out << QStringLiteral(u"07_刻度配置/ — 能量刻度、效率刻度、设备参数配置\n");
out << QStringLiteral(u"\n----------------------------------------\n");
out << QStringLiteral(u" 数据格式说明\n");
out << QStringLiteral(u"----------------------------------------\n");
out << QStringLiteral(u"所有数据文件均为 CSV 格式UTF-8 编码,逗号分隔。\n");
out << QStringLiteral(u"计数值均为普通十进制表示,无科学计数法。\n");
readme_file.close();
export_count++;
export_log << QStringLiteral(u" ✓ 导出说明.txt");
}
}
//原始粒子数据
if (chk_particle->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"01_原始粒子数据"));
export_log << QStringLiteral(u"\n[01_原始粒子数据]");
const QString& particle_file = project_model->GetAllChannelParticleDataFilename();
copyFileToDir(particle_file, sub_dir, QStringLiteral(u"粒子数据.csv"));
if (!QFile::exists(particle_file)) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 道址计数
if (chk_addr_count->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"02_道址计数"));
export_log << QStringLiteral(u"\n[02_道址计数]");
const auto& addr_count_map = project_model->GetChannelAddressCountDataFilenameList();
int cnt = copyFileMapToDir(addr_count_map, sub_dir, QStringLiteral(u"通道"));
if (cnt == 0) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 能量计数
if (chk_energy_count->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"03_能量计数"));
export_log << QStringLiteral(u"\n[03_能量计数]");
// 全通道能量计数
const QString& all_ch_file = project_model->GetAllChannelEnergyTotalCountDataFilename();
copyFileToDir(all_ch_file, sub_dir, QStringLiteral(u"全通道能量计数.csv"));
// 各通道能量计数
const auto& energy_count_map = project_model->GetChannelEnergyCountDataFilenameList();
int cnt = copyFileMapToDir(energy_count_map, sub_dir, QStringLiteral(u"通道"));
if (!QFile::exists(all_ch_file) && cnt == 0) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 能谱数据(粒子能量数据)
if (chk_spectrum->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"04_能谱数据"));
export_log << QStringLiteral(u"\n[04_能谱数据]");
const QString& energy_file = project_model->GetParticleEnergyDataFilename();
copyFileToDir(energy_file, sub_dir, QStringLiteral(u"粒子能量数据.csv"));
if (!QFile::exists(energy_file)) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 符合数据
if (chk_conform->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"05_符合数据"));
export_log << QStringLiteral(u"\n[05_符合数据]");
int total = 0;
// 粒子符合数据
QString particle_sub_dir = QDir(sub_dir).filePath(QStringLiteral(u"粒子符合"));
const auto& conform_particle_map = project_model->GetConformParticleDataFilenameList();
for (auto it = conform_particle_map.constBegin(); it != conform_particle_map.constEnd(); ++it) {
uint time_win = it.key();
const auto& order_map = it.value();
for (auto order_it = order_map.constBegin(); order_it != order_map.constEnd(); ++order_it) {
uint order = order_it.key();
const QString& src_file = order_it.value();
QString dst_name = QStringLiteral(u"[%1ns]%2个粒子符合事件.csv").arg(time_win).arg(order);
if (copyFileToDir(src_file, particle_sub_dir, dst_name)) {
total++;
}
}
}
// 能量符合数据
QString energy_sub_dir = QDir(sub_dir).filePath(QStringLiteral(u"能量符合"));
const auto& conform_energy_map = project_model->GetConformParticleEnergyDataFilenameList();
for (auto it = conform_energy_map.constBegin(); it != conform_energy_map.constEnd(); ++it) {
uint time_win = it.key();
const auto& order_map = it.value();
for (auto order_it = order_map.constBegin(); order_it != order_map.constEnd(); ++order_it) {
uint order = order_it.key();
const QString& src_file = order_it.value();
QString dst_name = QStringLiteral(u"[%1ns]%2个粒子符合能谱.csv").arg(time_win).arg(order);
if (copyFileToDir(src_file, energy_sub_dir, dst_name)) {
total++;
}
}
}
if (total == 0) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 反符合数据
if (chk_anti_conform->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"06_反符合数据"));
export_log << QStringLiteral(u"\n[06_反符合数据]");
int total = 0;
// 反符合粒子数据
const auto& anti_particle_map = project_model->GetAntiConformParticleData();
for (auto it = anti_particle_map.constBegin(); it != anti_particle_map.constEnd(); ++it) {
uint time_win = it.key();
const QString& src_file = it.value();
QString dst_name = QStringLiteral(u"反符合粒子事件_%1ns.csv").arg(time_win);
if (copyFileToDir(src_file, sub_dir, dst_name)) {
total++;
}
}
// 反符合能量数据
const auto& anti_energy_map = project_model->GetAntiConformEnergyData();
for (auto it = anti_energy_map.constBegin(); it != anti_energy_map.constEnd(); ++it) {
uint time_win = it.key();
const QString& src_file = it.value();
QString dst_name = QStringLiteral(u"反符合能量能谱_%1ns.csv").arg(time_win);
if (copyFileToDir(src_file, sub_dir, dst_name)) {
total++;
}
}
if (total == 0) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 刻度配置数据
if (chk_scale->isChecked()) {
QString sub_dir = QDir(export_dir).filePath(QStringLiteral(u"07_刻度配置"));
export_log << QStringLiteral(u"\n[07_刻度配置]");
// 能量刻度
const QString& energy_scale_file = project_model->GetEnergyScaleFilename();
copyFileToDir(energy_scale_file, sub_dir, QStringLiteral(u"能量刻度.json"));
// 效率刻度
const QString& efficiency_scale_file = project_model->GetEfficiencyScaleFilename();
copyFileToDir(efficiency_scale_file, sub_dir, QStringLiteral(u"效率刻度.json"));
// 设备参数配置
const QString& device_cfg_file = project_model->GetMeasureDeviceParamsCfgFilename();
copyFileToDir(device_cfg_file, sub_dir, QStringLiteral(u"设备参数配置.json"));
if (!QFile::exists(energy_scale_file) && !QFile::exists(efficiency_scale_file) && !QFile::exists(device_cfg_file)) {
export_log << QStringLiteral(u" (无数据)");
}
}
// 导出完成提示
QString info_text = QStringLiteral(u"导出测量分析项目\"%1\"完成,共导出 %2 个文件。\n导出目录:%3")
.arg(project_name).arg(export_count).arg(export_dir);
LOG_INFO(info_text);
// 拼接日志文本
QString log_text = export_log.join("\n");
QString full_msg = QStringLiteral(u"导出完成!\n\n项目:%1\n导出文件数:%2\n导出目录:%3\n\n---- 导出清单 ----\n%4")
.arg(project_name).arg(export_count).arg(export_dir).arg(log_text);
QMessageBox::information(this, QStringLiteral(u"导出完成"), full_msg);
}

View File

@ -91,6 +91,8 @@ private slots:
void on_action_device_connect_cfg_triggered(); void on_action_device_connect_cfg_triggered();
//感兴趣区 //感兴趣区
void on_action_roi_triggered(); void on_action_roi_triggered();
//导出测量分析数据
void on_action_output_measurement_analysis_triggered();
void onParticleDatarefresh(); void onParticleDatarefresh();
void onAddressCountViewNeedRefresh(); void onAddressCountViewNeedRefresh();

View File

@ -110,6 +110,16 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index)
} }
} }
;break; ;break;
case AnalysisType::EfficiencyScale:{
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
if (project_model) {
auto file_name = project_model->GetEfficiencyScaleFilename();
if ( !file_name.isEmpty() ) {
data_files_set[QStringLiteral(u"效率刻度")] = file_name;
}
}
}
;break;
case AnalysisType::ParticleData: { case AnalysisType::ParticleData: {
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
if (project_model) { if (project_model) {

View File

@ -14,6 +14,7 @@
#include "CoincidenceEventTimeView.h" #include "CoincidenceEventTimeView.h"
#include "NuclideAnalysisView.h" #include "NuclideAnalysisView.h"
#include "EnergyScaleForm.h" #include "EnergyScaleForm.h"
#include "EfficiencyScale.h"
#include <QMap> #include <QMap>
MeasureAnalysisView* MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type) MeasureAnalysisView* MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type)
@ -33,8 +34,8 @@ MeasureAnalysisView* MeasureAnalysisView::NewAnalyzeView(AnalysisType view_type)
new_view->setDeleteOnClose(true); new_view->setDeleteOnClose(true);
} break; } break;
case AnalysisType::EfficiencyScale: { case AnalysisType::EfficiencyScale: {
// new_view = new MeasureAnalysisDataTableView; new_view = new EfficiencyScale;
// new_view->setDeleteOnClose(true); new_view->setDeleteOnClose(true);
} break; } break;
case AnalysisType::ParticleData: { case AnalysisType::ParticleData: {
new_view = new MeasureAnalysisDataTableView; new_view = new MeasureAnalysisDataTableView;

View File

@ -107,6 +107,20 @@ void NewMeasureAnalysisDlg::initialization()
ui->comboBox_energy_scale->addItem(energy_scale_file_info.baseName(), energy_scale_file_info.absoluteFilePath()); ui->comboBox_energy_scale->addItem(energy_scale_file_info.baseName(), energy_scale_file_info.absoluteFilePath());
} }
} }
//遍历可执行文件目录中configure/EfficiencyScale
const QString &efficiency_scale_dir_path = QDir(qApp->applicationDirPath()).filePath("configure/EfficiencyScale");
QDir efficiency_scale_dir(efficiency_scale_dir_path);
if (!efficiency_scale_dir.exists(efficiency_scale_dir_path)) {
return;
}
QList<QString> efficiency_scale_basenames = efficiency_scale_dir.entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks, QDir::Time);
for (const QString& efficiency_scale_basename : efficiency_scale_basenames) {
const QString& efficiency_scale_filename = efficiency_scale_dir.filePath(efficiency_scale_basename);
QFileInfo efficiency_scale_file_info(efficiency_scale_filename);
if ("json" == efficiency_scale_file_info.suffix()) {
ui->comboBox_efficiency_scale->addItem(efficiency_scale_file_info.baseName(), efficiency_scale_file_info.absoluteFilePath());
}
}
ui->btn_ok->setEnabled(false); ui->btn_ok->setEnabled(false);
auto turnStackPageBtnState = [this](){ auto turnStackPageBtnState = [this](){
@ -181,6 +195,13 @@ void NewMeasureAnalysisDlg::newProject(const QString& particle_data_filename)
readJsonAsSave(energy_scale_filename,project_energy_scale_filename); readJsonAsSave(energy_scale_filename,project_energy_scale_filename);
// QFile::copy(energy_scale_filename, project_energy_scale_filename); // QFile::copy(energy_scale_filename, project_energy_scale_filename);
} }
//效率刻度拷贝至当前项目下
QString efficiency_scale_filename = ui->comboBox_efficiency_scale->currentData().toString();
QString project_efficiency_scale_filename = QDir(project_dir_path).filePath(QStringLiteral(u"效率刻度.json"));
QFileInfo efficiency_scale_file_info(efficiency_scale_filename);
if (efficiency_scale_file_info.exists()) {
QFile::copy(efficiency_scale_filename, project_efficiency_scale_filename);
}
bool is_measure_complete = !particle_data_filename.isEmpty(); bool is_measure_complete = !particle_data_filename.isEmpty();
@ -196,6 +217,9 @@ void NewMeasureAnalysisDlg::newProject(const QString& particle_data_filename)
model->SetMeasureDeviceParamsCfgFilename(project_measure_param_filename); model->SetMeasureDeviceParamsCfgFilename(project_measure_param_filename);
if(measure_param_file_info.exists(project_energy_scale_filename)) if(measure_param_file_info.exists(project_energy_scale_filename))
model->SetEnergyScaleFilename(project_energy_scale_filename); model->SetEnergyScaleFilename(project_energy_scale_filename);
if(measure_param_file_info.exists(project_efficiency_scale_filename))
model->SetEfficiencyScaleFilename(project_efficiency_scale_filename);
model->SetAllChannelParticleDataFilename(particle_data_filename); model->SetAllChannelParticleDataFilename(particle_data_filename);
model->SetIsMeasureComplete(is_measure_complete); model->SetIsMeasureComplete(is_measure_complete);
ProjectList::Instance()->AddProjectModel(model); ProjectList::Instance()->AddProjectModel(model);