From c113ae5fa8f6f313d3fb400e23315645bb396f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B5=B7?= Date: Fri, 20 Mar 2026 00:24:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=B7=B2=E7=9F=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/EnergyScaleDataModel.cpp | 6 ++- src/EnergyScaleDataModel.h | 1 + src/MainWindow.cpp | 54 +++++++++++-------- src/MainWindow.h | 14 +++-- .../BatchEnergyScaleDialog.cpp | 7 ++- src/MeasureAnalysisProjectModel.cpp | 17 ++++-- src/MeasureAnalysisProjectModel.h | 2 +- 7 files changed, 64 insertions(+), 37 deletions(-) diff --git a/src/EnergyScaleDataModel.cpp b/src/EnergyScaleDataModel.cpp index 4bbc12e..5007a99 100644 --- a/src/EnergyScaleDataModel.cpp +++ b/src/EnergyScaleDataModel.cpp @@ -10,7 +10,6 @@ EnergyScaleDataModel::EnergyScaleDataModel(const QString& filename) : _data_file EnergyScaleDataModel::~EnergyScaleDataModel() { - SaveData(); } void EnergyScaleDataModel::SetDataFilename(const QString& filename) @@ -18,6 +17,11 @@ void EnergyScaleDataModel::SetDataFilename(const QString& filename) _data_filename = filename; } +const QString &EnergyScaleDataModel::GetDataFilename() const +{ + return _data_filename; +} + bool EnergyScaleDataModel::LoadData() { QFile json_file(_data_filename); diff --git a/src/EnergyScaleDataModel.h b/src/EnergyScaleDataModel.h index b2f20d7..57f5f8b 100644 --- a/src/EnergyScaleDataModel.h +++ b/src/EnergyScaleDataModel.h @@ -11,6 +11,7 @@ public: ~EnergyScaleDataModel(); void SetDataFilename(const QString& filename); + const QString& GetDataFilename() const; bool LoadData(); bool SaveData(); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 3c53098..14e267f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -29,11 +29,20 @@ using namespace ads; -QMutex MainWindow::_s_mutex_info_output; -QPlainTextEdit* MainWindow::_s_plain_edit_info_output = nullptr; -QStatusBar* MainWindow::_s_status_bar = nullptr; +MainWindow* MainWindow::_s_main_win = nullptr; void MainWindow::OutputInfo(OutputInfoType out_type, const QString& ouput_info) +{ + + QMetaObject::invokeMethod(_s_main_win, "onOutputInfo", Qt::QueuedConnection, Q_ARG(int, int(out_type)), Q_ARG(QString, ouput_info)); +} + +void MainWindow::ShowStatusBarMsg(const QString& msg) +{ + QMetaObject::invokeMethod(_s_main_win, "onShowStatusBarMsg", Qt::QueuedConnection, Q_ARG(QString, msg)); +} + +void MainWindow::onOutputInfo(int out_type, const QString &ouput_info) { if (!ouput_info.isEmpty()) { QStringList list_str_out_type = { @@ -52,25 +61,25 @@ void MainWindow::OutputInfo(OutputInfoType out_type, const QString& ouput_info) .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")) .arg(list_str_out_type.at(int(out_type))) .arg(ouput_info); - // QTextCharFormat cur_fmt, fmt; - // fmt.setForeground(QBrush(list_color_out_type.at(out_type))); - _s_mutex_info_output.lock(); - // cur_fmt = _s_plain_edit_info_output->currentCharFormat(); - // _s_plain_edit_info_output->mergeCurrentCharFormat(fmt); - _s_plain_edit_info_output->appendPlainText(ouput_text); - // _s_plain_edit_info_output->setCurrentCharFormat(cur_fmt); - // QScrollBar* scrollbar = _s_plain_edit_info_output->verticalScrollBar(); - // if (scrollbar) { - // scrollbar->setSliderPosition(scrollbar->maximum()); - // } - _s_plain_edit_info_output->update(); - _s_mutex_info_output.unlock(); + QTextCharFormat cur_fmt, fmt; + fmt.setForeground(QBrush(list_color_out_type.at(out_type))); + _mutex_info_output.lock(); + cur_fmt = _plain_edit_info_output->currentCharFormat(); + _plain_edit_info_output->mergeCurrentCharFormat(fmt); + _plain_edit_info_output->appendPlainText(ouput_text); + _plain_edit_info_output->setCurrentCharFormat(cur_fmt); + QScrollBar* scrollbar = _plain_edit_info_output->verticalScrollBar(); + if (scrollbar) { + scrollbar->setSliderPosition(scrollbar->maximum()); + } + _plain_edit_info_output->update(); + _mutex_info_output.unlock(); } } -void MainWindow::ShowStatusBarMsg(const QString& msg) +void MainWindow::onShowStatusBarMsg(const QString &msg) { - _s_status_bar->showMessage(msg); + _status_bar->showMessage(msg); } MainWindow::MainWindow(QWidget* parent) @@ -78,12 +87,13 @@ MainWindow::MainWindow(QWidget* parent) , ui(new Ui::MainWindow) { ui->setupUi(this); - _s_status_bar = ui->statusbar; + _status_bar = ui->statusbar; initMainWindow(); initAction(); this->applyStyleSheet(); + _s_main_win = this; } MainWindow::~MainWindow() @@ -128,10 +138,10 @@ void MainWindow::initMainWindow() _menu_view_analysis_view_list = ui->menu_view->addMenu(QStringLiteral(u"分析视图列表")); // 构建日志输出视图 - _s_plain_edit_info_output = new QPlainTextEdit; - _s_plain_edit_info_output->setReadOnly(true); + _plain_edit_info_output = new QPlainTextEdit; + _plain_edit_info_output->setReadOnly(true); ads::CDockWidget* dockw_info_output = new ads::CDockWidget(QStringLiteral(u"信息输出")); - dockw_info_output->setWidget(_s_plain_edit_info_output); + dockw_info_output->setWidget(_plain_edit_info_output); dockw_info_output->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContentMinimumSize); _dock_manager->addDockWidget(ads::DockWidgetArea::BottomDockWidgetArea, dockw_info_output); ui->menu_view->addAction(dockw_info_output->toggleViewAction()); diff --git a/src/MainWindow.h b/src/MainWindow.h index 42c5666..9176215 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -30,13 +30,14 @@ public: eDebug }; Q_ENUM(OutputInfoType) -public slots: +public: static void OutputInfo(OutputInfoType out_type, const QString& ouput_info); static void ShowStatusBarMsg(const QString& msg); +public slots: + void onOutputInfo(int out_type, const QString& ouput_info); + void onShowStatusBarMsg(const QString& msg); private: - static QMutex _s_mutex_info_output; - static QPlainTextEdit* _s_plain_edit_info_output; - static QStatusBar* _s_status_bar; + static MainWindow* _s_main_win; public: MainWindow(QWidget *parent = nullptr); @@ -51,6 +52,11 @@ private: protected: virtual void closeEvent(QCloseEvent* event) override; +private: + QMutex _mutex_info_output; + QPlainTextEdit* _plain_edit_info_output; + QStatusBar* _status_bar; + private: Ui::MainWindow *ui; ads::CDockManager* _dock_manager { nullptr }; diff --git a/src/MeasureAnalysisParticleCountPlotView/BatchEnergyScaleDialog.cpp b/src/MeasureAnalysisParticleCountPlotView/BatchEnergyScaleDialog.cpp index 50aab41..5d358d2 100644 --- a/src/MeasureAnalysisParticleCountPlotView/BatchEnergyScaleDialog.cpp +++ b/src/MeasureAnalysisParticleCountPlotView/BatchEnergyScaleDialog.cpp @@ -21,7 +21,7 @@ BatchEnergyScaleDialog::BatchEnergyScaleDialog(QWidget* parent) this->setWindowModality(Qt::WindowModal); this->setModal(false); - ui->tablew_process_data->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui->tablew_process_data->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tablew_process_data->horizontalHeader()->setSectionResizeMode( ui->tablew_process_data->columnCount() - 1, QHeaderView::ResizeToContents); ui->tablew_process_data->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter); @@ -343,13 +343,12 @@ void BatchEnergyScaleDialog::applyEnergyScaleFitResultData() } QDir project_dir(project_model->GetProjectDir()); const QString& energy_scale_data_filename = project_dir.filePath(QStringLiteral(u"能量刻度.json")); - QDir result_dir(this->_workspace); - const QString& energy_scale_result_filename = result_dir.filePath(QStringLiteral(u"多通道能量刻度拟合.json")); + const QString& energy_scale_result_filename = this->_energy_scale_data_model->GetDataFilename(); if (QFile::copy(energy_scale_result_filename, energy_scale_data_filename)) { project_model->SetEnergyScaleFilename(energy_scale_data_filename); } } else { - + QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"不能应用非完整的能量刻度!")); } } diff --git a/src/MeasureAnalysisProjectModel.cpp b/src/MeasureAnalysisProjectModel.cpp index ed23263..6c6cb00 100644 --- a/src/MeasureAnalysisProjectModel.cpp +++ b/src/MeasureAnalysisProjectModel.cpp @@ -430,13 +430,20 @@ MeasureAnalysisProjectModelList::~MeasureAnalysisProjectModelList() } } -void MeasureAnalysisProjectModelList::AddProjectModel(MeasureAnalysisProjectModel* model) +bool MeasureAnalysisProjectModelList::AddProjectModel(MeasureAnalysisProjectModel* model) { + bool ok = true; const QString& project_name = model->GetProjectName(); - _project_models[project_name] = model; - intiProjectNodeStruce(model); - SetCurrentProjectModel(project_name); - model->SaveProjectModel(); + if (!_project_models.contains(project_name)) { + _project_models[project_name] = model; + intiProjectNodeStruce(model); + SetCurrentProjectModel(project_name); + model->SaveProjectModel(); + } else { + delete model; + ok &= false; + } + return ok; } bool MeasureAnalysisProjectModelList::RmProjectModel(const QString& project_name) diff --git a/src/MeasureAnalysisProjectModel.h b/src/MeasureAnalysisProjectModel.h index eb9e923..b0ed29d 100644 --- a/src/MeasureAnalysisProjectModel.h +++ b/src/MeasureAnalysisProjectModel.h @@ -131,7 +131,7 @@ public: static MeasureAnalysisProjectModelList* Instance(); virtual ~MeasureAnalysisProjectModelList(); - void AddProjectModel(MeasureAnalysisProjectModel* model); + bool AddProjectModel(MeasureAnalysisProjectModel* model); bool RmProjectModel(const QString& project_name); MeasureAnalysisProjectModel* GetProjectModel(const QString& project_name);