1、优化日志输出信息

2、调整后台任务监视列表显示
This commit is contained in:
徐海 2026-05-26 19:51:42 +08:00
parent d8759e1318
commit 1410ebfb7f
5 changed files with 40 additions and 51 deletions

View File

@ -114,7 +114,7 @@ void CountRateAnalysisView::setData(QVector<ParticleInjectTime> data)
// plot->setAxisScale(QwtPlot::xBottom, 0, x.last()); // plot->setAxisScale(QwtPlot::xBottom, 0, x.last());
// plot->setAxisScale(QwtPlot::yLeft,minValue , maxValue); // plot->setAxisScale(QwtPlot::yLeft,minValue , maxValue);
LOG_INFO(QStringLiteral(u"%1数据读取完毕.").arg(this->GetViewName())); // LOG_INFO(QStringLiteral(u"[%1]计数率分析数据读取完毕.").arg(this->GetProjectName()).arg(this->GetViewName()));
// 刷新绘图 // 刷新绘图
plot->replot(); plot->replot();

View File

@ -208,16 +208,16 @@ bool EveryChannelParticleCountDataTask::processEveryChannelParticleData()
channel_file_streams.clear(); channel_file_streams.clear();
} catch (const std::runtime_error& e) { } catch (const std::runtime_error& e) {
const QString& e_what = QString::fromLatin1(e.what()); const QString& e_what = QString::fromLatin1(e.what());
QString error = QStringLiteral(u"处理%1发生运行时异常:%2").arg(all_channel_particle_data_filename).arg(e_what); QString error = QStringLiteral(u"[%1]处理%2发生运行时异常:%3").arg(this->GetProjectName()).arg(all_channel_particle_data_filename).arg(e_what);
LOG_ERROR(error) LOG_ERROR(error)
ret_ok = false; ret_ok = false;
} catch (const std::exception& e) { } catch (const std::exception& e) {
const QString& e_what = QString::fromLatin1(e.what()); const QString& e_what = QString::fromLatin1(e.what());
QString error = QStringLiteral(u"处理%1异常:%2").arg(all_channel_particle_data_filename).arg(e_what); QString error = QStringLiteral(u"[%1]处理%2异常:%3").arg(this->GetProjectName()).arg(all_channel_particle_data_filename).arg(e_what);
LOG_ERROR(error) LOG_ERROR(error)
ret_ok = false; ret_ok = false;
} catch (...) { } catch (...) {
QString error = QStringLiteral(u"处理%1未知异常.").arg(all_channel_particle_data_filename); QString error = QStringLiteral(u"[%1]处理%2未知异常.").arg(this->GetProjectName()).arg(all_channel_particle_data_filename);
LOG_ERROR(error) LOG_ERROR(error)
ret_ok = false; ret_ok = false;
} }
@ -232,7 +232,7 @@ bool EveryChannelParticleCountDataTask::processEveryChannelParticleData()
project_model->SetChannelAddressCountDataFilename(it.key(), it.value()); project_model->SetChannelAddressCountDataFilename(it.key(), it.value());
} }
} }
const QString& info = QStringLiteral(u"所有通道粒子计数处理完成."); const QString& info = QStringLiteral(u"[%1]所有通道粒子计数处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return ret_ok; return ret_ok;
} }
@ -428,11 +428,11 @@ bool ParticleDataSortTask::processEveryChannelParticleData()
} catch (const std::exception& e) { } catch (const std::exception& e) {
const QString& e_what = QString::fromLatin1(e.what()); const QString& e_what = QString::fromLatin1(e.what());
QString error = QString(QStringLiteral(u"处理%1异常:%2")).arg(all_channel_particle_data_filename).arg(e_what); QString error = QStringLiteral(u"[%1]处理%2异常:%3").arg(this->GetProjectName()).arg(all_channel_particle_data_filename).arg(e_what);
LOG_ERROR(error); LOG_ERROR(error);
ret_ok = false; ret_ok = false;
} catch (...) { } catch (...) {
QString error = QString(QStringLiteral(u"处理%1未知异常.")).arg(all_channel_particle_data_filename); QString error = QStringLiteral(u"[%1]处理%2未知异常.").arg(this->GetProjectName()).arg(all_channel_particle_data_filename);
LOG_ERROR(error); LOG_ERROR(error);
ret_ok = false; ret_ok = false;
} }
@ -465,7 +465,7 @@ bool ParticleDataSortByMinimysTask::processEveryChannelParticleData()
proc.waitForFinished(-1); proc.waitForFinished(-1);
if (proc.exitCode() != 0) { if (proc.exitCode() != 0) {
QString process_error = QString(proc.readAllStandardError()); QString process_error = QString(proc.readAllStandardError());
QString error = QStringLiteral(u"处理%1异常:%2").arg(data_filename).arg(process_error); QString error = QStringLiteral(u"[%1]处理%2异常:%3").arg(this->GetProjectName()).arg(data_filename).arg(process_error);
LOG_ERROR(error); LOG_ERROR(error);
ret_ok = false; ret_ok = false;
} }
@ -548,10 +548,10 @@ bool CoincidenceEventAnalysisTask::processTask()
project_model->SetAntiConformParticleData(project_model->GetConformTimeWin(), anti_event_data_filename); project_model->SetAntiConformParticleData(project_model->GetConformTimeWin(), anti_event_data_filename);
} catch (const std::exception& e) { } catch (const std::exception& e) {
const QString& e_what = QString::fromUtf8(e.what()); const QString& e_what = QString::fromUtf8(e.what());
LOG_WARN(QStringLiteral(u"粒子符合数据处理异常:%1").arg(e_what)); LOG_WARN(QStringLiteral(u"[%1]粒子符合数据处理异常:%1").arg(this->GetProjectName()).arg(e_what));
return false; return false;
} }
const QString& info = QStringLiteral(u"粒子符合数据处理完成."); const QString& info = QStringLiteral(u"[%1]粒子符合数据处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -614,7 +614,7 @@ bool AutoFindPeaksTask::processTask()
arma::mat data; arma::mat data;
const std::string data_filename = QStrToSysPath(ch_count_data_filename); const std::string data_filename = QStrToSysPath(ch_count_data_filename);
if (!data.load(data_filename, arma::csv_ascii)) { if (!data.load(data_filename, arma::csv_ascii)) {
QString error = QString(QStringLiteral(u"%1自动寻峰数据加载异常!")).arg(ch_count_data_name); QString error = QStringLiteral(u"[%1]%2自动寻峰数据加载异常!").arg(this->GetProjectName()).arg(ch_count_data_name);
LOG_WARN(error); LOG_WARN(error);
continue; continue;
} }
@ -622,7 +622,7 @@ bool AutoFindPeaksTask::processTask()
try { try {
peak_info_vec = FindPeaksBySvd().FindPeaks(data, this->_step_win_width); peak_info_vec = FindPeaksBySvd().FindPeaks(data, this->_step_win_width);
} catch (const std::string& e) { } catch (const std::string& e) {
QString error = QString(QStringLiteral(u"%1自动寻峰异常:%2!")).arg(ch_count_data_name).arg(QString::fromStdString(e)); QString error = QStringLiteral(u"[%1]%2自动寻峰异常:%3!").arg(this->GetProjectName()).arg(ch_count_data_name).arg(QString::fromStdString(e));
LOG_WARN(error); LOG_WARN(error);
continue; continue;
} }
@ -639,10 +639,10 @@ bool AutoFindPeaksTask::processTask()
<< width << "," << height << "," << fwhm << "," << area << "\n"; << width << "," << height << "," << fwhm << "," << area << "\n";
} }
} else { } else {
const QString& error = QStringLiteral(u"%1自动寻峰异常!").arg(ch_count_data_name); const QString& error = QStringLiteral(u"[%1]%2自动寻峰异常!").arg(this->GetProjectName()).arg(ch_count_data_name);
LOG_WARN(error); LOG_WARN(error);
} }
const QString& info = QStringLiteral(u"%1自动寻峰完成.").arg(ch_count_data_name); const QString& info = QStringLiteral(u"[%1]%2自动寻峰完成.").arg(this->GetProjectName()).arg(ch_count_data_name);
LOG_INFO(info); LOG_INFO(info);
} }
} }
@ -654,7 +654,7 @@ bool AutoFindPeaksTask::processTask()
} else { } else {
project_model->SetAnalysisCustomData(this->_analysis_type, QString("AutoFindPeaksResult"), result_filename); project_model->SetAnalysisCustomData(this->_analysis_type, QString("AutoFindPeaksResult"), result_filename);
} }
const QString& info = QStringLiteral(u"自动寻峰完成."); const QString& info = QStringLiteral(u"[%1]自动寻峰完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -705,17 +705,17 @@ bool ChannelEnergyScaleFittingTask::processTask()
try { try {
energy_scale_fit_result_coeffs = GaussPolyCoe::PolynomialFit(vec_x, vec_y1, fit_degree); energy_scale_fit_result_coeffs = GaussPolyCoe::PolynomialFit(vec_x, vec_y1, fit_degree);
} catch(const std::exception& e) { } catch(const std::exception& e) {
QString error = QString(QStringLiteral(u"%1能量刻度多项式%2次拟合异常:%3!")).arg(channel).arg(fit_degree).arg(QString::fromStdString(e.what())); QString error = QStringLiteral(u"[%1]%2能量刻度多项式%3次拟合异常:%4!").arg(this->GetProjectName()).arg(channel).arg(fit_degree).arg(QString::fromStdString(e.what()));
LOG_WARN(error); LOG_WARN(error);
} }
arma::vec fwhm_fit_result_coeffs; arma::vec fwhm_fit_result_coeffs;
try { try {
fwhm_fit_result_coeffs = NolinearLeastSquaresCurveFit::Lsqcurvefit(FwhmModel, vec_y1, vec_y2, { 1.0, 1.0 }); fwhm_fit_result_coeffs = NolinearLeastSquaresCurveFit::Lsqcurvefit(FwhmModel, vec_y1, vec_y2, { 1.0, 1.0 });
} catch(const std::exception& e) { } catch(const std::exception& e) {
QString error = QString(QStringLiteral(u"%1分辨率拟合异常:%2!")).arg(channel).arg(QString::fromStdString(e.what())); QString error = QStringLiteral(u"[%1]%2分辨率拟合异常:%3!").arg(this->GetProjectName()).arg(channel).arg(QString::fromStdString(e.what()));
LOG_WARN(error); LOG_WARN(error);
} }
const QString& info = QStringLiteral(u"%1能量刻度拟合完成.").arg(channel); const QString& info = QStringLiteral(u"[%1]%2能量刻度拟合完成.").arg(this->GetProjectName()).arg(channel);
LOG_INFO(info); LOG_INFO(info);
std::vector<std::vector<double> > fit_result_data; std::vector<std::vector<double> > fit_result_data;
@ -745,7 +745,7 @@ bool ChannelEnergyScaleFittingTask::processTask()
return false; return false;
} }
const QString& info = QStringLiteral(u"能量刻度拟合完成."); const QString& info = QStringLiteral(u"[%1]能量刻度拟合完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -809,10 +809,10 @@ bool EnergyScaleParticleDataTask::processTask()
out.close(); out.close();
std::remove(QStrToSysPath(energy_spectrum_filename).c_str()); std::remove(QStrToSysPath(energy_spectrum_filename).c_str());
const QString& e_what = QString::fromStdString(e.what()); const QString& e_what = QString::fromStdString(e.what());
LOG_WARN(QStringLiteral(u"能谱数据处理异常:%1").arg(e_what)); LOG_WARN(QStringLiteral(u"[%1]能谱数据处理异常:%1").arg(this->GetProjectName()).arg(e_what));
return false; return false;
} }
const QString& info = QStringLiteral(u"能谱数据处理完成."); const QString& info = QStringLiteral(u"[%1]能谱数据处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -838,12 +838,12 @@ bool EnergyCountProcessTask::processTask()
} }
const QMap<uint, QString>& ch_addr_count_filename_list = project_model->GetChannelAddressCountDataFilenameList(); const QMap<uint, QString>& ch_addr_count_filename_list = project_model->GetChannelAddressCountDataFilenameList();
if (ch_addr_count_filename_list.isEmpty()) { if (ch_addr_count_filename_list.isEmpty()) {
LOG_WARN(QStringLiteral(u"能量计数统计需要的通道道址计数文件异常!")); LOG_WARN(QStringLiteral(u"[%1]能量计数统计需要的通道道址计数文件异常!").arg(this->GetProjectName()));
return false; return false;
} }
const QString& out_path = QDir(project_model->GetProjectDir()).filePath(QStringLiteral(u"能量计数")); const QString& out_path = QDir(project_model->GetProjectDir()).filePath(QStringLiteral(u"能量计数"));
if ( !QDir(out_path).mkpath(out_path) ) { if ( !QDir(out_path).mkpath(out_path) ) {
LOG_WARN(QStringLiteral(u"创建能量计数数据目录\"%1\"异常!").arg(out_path)); LOG_WARN(QStringLiteral(u"[%1]创建能量计数数据目录\"%2\"异常!").arg(this->GetProjectName()).arg(out_path));
return false; return false;
} }
std::string address_str = QString(QStringLiteral(u"道址")).toStdString(); std::string address_str = QString(QStringLiteral(u"道址")).toStdString();
@ -887,7 +887,7 @@ bool EnergyCountProcessTask::processTask()
ch_out.close(); ch_out.close();
std::remove(QStrToSysPath(ch_out_filename).c_str()); std::remove(QStrToSysPath(ch_out_filename).c_str());
const QString& e_what = QString::fromStdString(e.what()); const QString& e_what = QString::fromStdString(e.what());
LOG_WARN(QStringLiteral(u"%1能量计数异常:%2").arg(channel_name).arg(e_what)); LOG_WARN(QStringLiteral(u"[%1]%2能量计数异常:%3").arg(this->GetProjectName()).arg(channel_name).arg(e_what));
} }
} }
const QString& out_filename = QDir(out_path).filePath(QStringLiteral(u"全通道.csv")); const QString& out_filename = QDir(out_path).filePath(QStringLiteral(u"全通道.csv"));
@ -897,7 +897,7 @@ bool EnergyCountProcessTask::processTask()
out << energy << "," << count << "\n"; out << energy << "," << count << "\n";
} }
project_model->SetAllChannelEnergyTotalCountDataFilename(out_filename); project_model->SetAllChannelEnergyTotalCountDataFilename(out_filename);
const QString& info = QStringLiteral(u"能量计数处理完成."); const QString& info = QStringLiteral(u"[%1]能量计数处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -965,7 +965,7 @@ bool EnergyScaleCoincidenceDataTask::processTask()
data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy); data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy);
out_stream << event_id << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ; out_stream << event_id << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ;
} else { } else {
LOG_WARN(QStringLiteral(u"符合能谱数据处理异常:%1能量刻度拟合参数为空!").arg(channel_name)); LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name));
// out_stream.close(); // out_stream.close();
// QFile::remove(coincidence_energy_data_filename); // QFile::remove(coincidence_energy_data_filename);
// return false; // return false;
@ -975,7 +975,7 @@ bool EnergyScaleCoincidenceDataTask::processTask()
project_model->SetTimeWinConformEnergyData(time_win, coincidence_order, coincidence_energy_data_filename); project_model->SetTimeWinConformEnergyData(time_win, coincidence_order, coincidence_energy_data_filename);
} catch (const std::exception& e) { } catch (const std::exception& e) {
const QString& e_what = QString::fromStdString(e.what()); const QString& e_what = QString::fromStdString(e.what());
LOG_WARN(QStringLiteral(u"符合能谱数据处理异常:%1").arg(e_what)); LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2").arg(this->GetProjectName()).arg(e_what));
return false; return false;
} }
return true; return true;
@ -989,7 +989,7 @@ bool EnergyScaleCoincidenceDataTask::processTask()
} }
} }
const QString& info = QStringLiteral(u"符合能谱数据处理完成."); const QString& info = QStringLiteral(u"[%1]符合能谱数据处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -1057,19 +1057,19 @@ bool EnergyScaleaAntiCoincidenceDataTask::processTask()
data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy); data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy);
out_stream << time_window << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ; out_stream << time_window << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ;
} else { } else {
LOG_WARN(QStringLiteral(u"符合能谱数据处理异常:%1能量刻度拟合参数为空!").arg(channel_name)); LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name));
} }
} }
out_stream.close(); out_stream.close();
project_model->SetAntiConformEnergyData(time_win, anti_coincidence_energy_data_filename); project_model->SetAntiConformEnergyData(time_win, anti_coincidence_energy_data_filename);
} catch (const std::exception& e) { } catch (const std::exception& e) {
const QString& e_what = QString::fromStdString(e.what()); const QString& e_what = QString::fromStdString(e.what());
LOG_WARN(QStringLiteral(u"反符合能谱数据处理异常:%1").arg(e_what)); LOG_WARN(QStringLiteral(u"[%1]反符合能谱数据处理异常:%2").arg(this->GetProjectName()).arg(e_what));
return false; return false;
} }
} }
const QString& info = QStringLiteral(u"反符合能谱数据处理完成."); const QString& info = QStringLiteral(u"[%1]反符合能谱数据处理完成.").arg(this->GetProjectName());
LOG_INFO(info); LOG_INFO(info);
return true; return true;
} }
@ -1101,24 +1101,15 @@ bool GvfToCsvDataTask::processTask()
if (!csvDir.exists()) { if (!csvDir.exists()) {
if (!csvDir.mkpath(".")) { if (!csvDir.mkpath(".")) {
m_error = QStringLiteral(u"无法创建输出目录: %1").arg(csvDir.path()); m_error = QStringLiteral(u"[%1]无法创建输出目录: %2").arg(this->GetProjectName()).arg(csvDir.path());
LOG_ERROR(m_error.toUtf8().constData()); LOG_ERROR(m_error);
return false; return false;
} }
} }
QString testFile = csvDir.filePath(".test_write.tmp");
QFile test(testFile);
if (!test.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
m_error = QStringLiteral(u"输出目录不可写: %1").arg(csvDir.path());
LOG_ERROR(m_error.toUtf8().constData());
return false;
}
test.remove();
if (m_gvfName.isEmpty() || m_csvName.isEmpty()) { if (m_gvfName.isEmpty() || m_csvName.isEmpty()) {
m_error = "GVF文件路径或CSV输出路径为空"; m_error = QStringLiteral(u"[%1]GVF文件路径或CSV输出路径为空").arg(this->GetProjectName());
LOG_ERROR(m_error.toUtf8().constData()); LOG_ERROR(m_error);
return false; return false;
} }
std::unique_ptr<GvfToCsv> gvf2Csv(new GvfToCsv()); std::unique_ptr<GvfToCsv> gvf2Csv(new GvfToCsv());
@ -1131,9 +1122,7 @@ bool GvfToCsvDataTask::processTask()
} else { } else {
m_error = gvf2Csv->getLastError(); m_error = gvf2Csv->getLastError();
m_conversionSuccess = false; m_conversionSuccess = false;
LOG_ERROR(QStringLiteral(u"GVF转换失败: %1") LOG_ERROR(QStringLiteral(u"[%1]GVF转换失败: %2").arg(this->GetProjectName()).arg(m_error));
.arg(m_error)
.toUtf8().constData());
} }
return m_conversionSuccess; return m_conversionSuccess;

View File

@ -308,7 +308,7 @@ void MainWindow::initAction()
void MainWindow::initStatusBar() void MainWindow::initStatusBar()
{ {
_w_watcher_task_list = new BackgroundTaskListView(this); _w_watcher_task_list = new BackgroundTaskListView(this);
_w_watcher_task_list->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); _w_watcher_task_list->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
QPalette palette = _w_watcher_task_list->palette(); QPalette palette = _w_watcher_task_list->palette();
palette.setColor(QPalette::Base, Qt::gray); palette.setColor(QPalette::Base, Qt::gray);
_w_watcher_task_list->setPalette(palette); _w_watcher_task_list->setPalette(palette);

View File

@ -146,7 +146,7 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index)
auto file_name_list = project_model->GetChannelEnergyCountDataFilenameList(); auto file_name_list = project_model->GetChannelEnergyCountDataFilenameList();
if ( !file_name_list.isEmpty() ) { if ( !file_name_list.isEmpty() ) {
auto ch_num_list = file_name_list.keys(); auto ch_num_list = file_name_list.keys();
for(auto ch_num : ch_num_list) { foreach(auto ch_num, ch_num_list) {
auto file_name = file_name_list[ch_num]; auto file_name = file_name_list[ch_num];
if ( !file_name.isEmpty() ) { if ( !file_name.isEmpty() ) {
data_files_set[QStringLiteral(u"通道%1").arg(ch_num)] = file_name; data_files_set[QStringLiteral(u"通道%1").arg(ch_num)] = file_name;
@ -312,7 +312,7 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index)
if (!data_files_set.isEmpty()) { if (!data_files_set.isEmpty()) {
view = MeasureAnalysisView::NewAnalyzeView(analysis_type); view = MeasureAnalysisView::NewAnalyzeView(analysis_type);
view->SetProjectName(project_name); view->SetProjectName(project_name);
const auto& view_name = QStringLiteral(u"%1[%2]").arg(item_text).arg(project_name); QString view_name = QStringLiteral(u"%1[%2]").arg(item_text).arg(project_name);
view->SetViewName(view_name); view->SetViewName(view_name);
view->SetViewDescription(view_name); view->SetViewDescription(view_name);
view->InitViewWorkspace(project_name); view->InitViewWorkspace(project_name);

View File

@ -142,7 +142,7 @@ void ParticleInjectTimeAnalysisView::updateData(bool b_init_update)
_plot->SetAxisInitRange(QwtPlot::yLeft, 0.0f, y_max); _plot->SetAxisInitRange(QwtPlot::yLeft, 0.0f, y_max);
_curve->setSamples(x, y); _curve->setSamples(x, y);
_plot->replot(); _plot->replot();
LOG_INFO(QStringLiteral(u"%1数据更新完毕.").arg(this->GetViewName())); // LOG_INFO(QStringLiteral(u"[%1]例子时间差数据加载完毕.").arg(this->GetProjectName()).arg(this->GetViewName()));
_busy_indicator->Stop(); _busy_indicator->Stop();
}, Qt::QueuedConnection); }, Qt::QueuedConnection);
} }