From 8d66507e834b6afc5c070faf583f095fdc2b9164 Mon Sep 17 00:00:00 2001 From: "DESKTOP-7I8SUIC\\zhang" Date: Sat, 27 Sep 2025 21:34:27 +0800 Subject: [PATCH] add copy channel config --- copy_channel.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++- copy_channel.h | 13 +++++-- copy_channel.ui | 6 ++++ radial_vibration.cpp | 1 + seismic_monitor.cpp | 14 ++++---- seismic_monitor.h | 2 ++ vibrationdata.cpp | 15 ++++++-- vibrationdata.h | 5 +++ 8 files changed, 125 insertions(+), 13 deletions(-) diff --git a/copy_channel.cpp b/copy_channel.cpp index cbd0e13..e9b74ec 100644 --- a/copy_channel.cpp +++ b/copy_channel.cpp @@ -1,11 +1,27 @@ #include "copy_channel.h" #include "ui_copy_channel.h" +#include "data_config.h" +#include "config_mgr.h" +#include "vibrationdata.h" +#include -CopyChannel::CopyChannel(QWidget *parent) : +CopyChannel::CopyChannel(int slot_no_,QWidget *parent) : QWidget(parent), ui(new Ui::CopyChannel) { ui->setupUi(this); + slot_no = slot_no_; + radio_btn.reserve(4); + check_ch.reserve(4); + radio_btn.push_back(ui->radioButton_ch1); + radio_btn.push_back(ui->radioButton_ch2); + radio_btn.push_back(ui->radioButton_ch3); + radio_btn.push_back(ui->radioButton_ch4); + check_ch.push_back(ui->checkBox_ch1); + check_ch.push_back(ui->checkBox_ch2); + check_ch.push_back(ui->checkBox_ch3); + check_ch.push_back(ui->checkBox_ch4); + ui->checkBox_ch1->setEnabled(false); } CopyChannel::~CopyChannel() @@ -61,3 +77,67 @@ void CopyChannel::on_radioButton_ch4_clicked(bool checked) ui->checkBox_ch1->setEnabled(true); } + +void CopyChannel::on_pushButton_cancel_clicked() +{ + this->close(); +} + + +void CopyChannel::on_pushButton_confirm_clicked() +{ + int var = 0; + for( ; var < 4; var ++){ + if(radio_btn[var]->isChecked()) + break; + } + std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); + if (base_ptr == nullptr) { + qDebug() << "base_ptr"; + return; + } + + std::shared_ptr vib_data = std::dynamic_pointer_cast(base_ptr); + for (int i = 0; i < 4; i++) { + if(i != var && check_ch[i]->isChecked()){ + QString point_name = vib_data->base_config_[i].point_name; + vib_data->base_config_[i] = vib_data->base_config_[var]; + vib_data->base_config_[i].point_name = point_name; + vib_data->dc_output[i] = vib_data->dc_output[var]; + auto variable_base_old = vib_data->GetChannelPtr(var + 1); + if(vib_data->base_config_[var].channel_type == kVibRadial){ + std::shared_ptr variable = std::dynamic_pointer_cast(variable_base_old); + std::shared_ptr variable_new = std::make_shared(); + *variable_new = *variable; + variable_new->id_ = i + 1; + vib_data->RemoveChannel(i + 1); + vib_data->InsertChannelPtr(variable_new); + }else if(vib_data->base_config_[var].channel_type == kVibAcc || + vib_data->base_config_[var].channel_type == kVibVelocity){ + std::shared_ptr variable = std::dynamic_pointer_cast(variable_base_old); + std::shared_ptr variable_new = std::make_shared(); + *variable_new = *variable; + variable_new->id_ = i + 1; + vib_data->RemoveChannel(i + 1); + vib_data->InsertChannelPtr(variable_new); + }else if(vib_data->base_config_[var].channel_type == kVibThrust){ + std::shared_ptr variable = std::dynamic_pointer_cast(variable_base_old); + std::shared_ptr variable_new = std::make_shared(); + *variable_new = *variable; + variable_new->id_ = i + 1; + vib_data->RemoveChannel(i + 1); + vib_data->InsertChannelPtr(variable_new); + }else if(vib_data->base_config_[var].channel_type == kVibPressurePulsation){ + std::shared_ptr variable = std::dynamic_pointer_cast(variable_base_old); + std::shared_ptr variable_new = std::make_shared(); + *variable_new = *variable; + variable_new->id_ = i + 1; + vib_data->RemoveChannel(i + 1); + vib_data->InsertChannelPtr(variable_new); + } + } + } + emit copy_end_sg(); + this->close(); +} + diff --git a/copy_channel.h b/copy_channel.h index 5ea3f89..e169218 100644 --- a/copy_channel.h +++ b/copy_channel.h @@ -2,7 +2,8 @@ #define COPY_CHANNEL_H #include - +#include +#include namespace Ui { class CopyChannel; } @@ -12,8 +13,9 @@ class CopyChannel : public QWidget Q_OBJECT public: - explicit CopyChannel(QWidget *parent = nullptr); + explicit CopyChannel(int slot_no_,QWidget *parent = nullptr); ~CopyChannel(); + int slot_no; private slots: void on_radioButton_ch1_clicked(bool checked); @@ -24,8 +26,15 @@ private slots: void on_radioButton_ch4_clicked(bool checked); + void on_pushButton_cancel_clicked(); + + void on_pushButton_confirm_clicked(); +signals: + void copy_end_sg(); private: Ui::CopyChannel *ui; + QList radio_btn; + QList check_ch; }; #endif // COPY_CHANNEL_H diff --git a/copy_channel.ui b/copy_channel.ui index bbcaf25..ace35c5 100644 --- a/copy_channel.ui +++ b/copy_channel.ui @@ -62,6 +62,9 @@ 通道1 + + true + buttonGroup @@ -133,6 +136,9 @@ 通道1 + + true + diff --git a/radial_vibration.cpp b/radial_vibration.cpp index 3159970..0dee9c0 100644 --- a/radial_vibration.cpp +++ b/radial_vibration.cpp @@ -56,6 +56,7 @@ void Radial::Init() { return; } std::shared_ptr variable_base = ptr->GetChannelPtr(channel); + if (variable_base == nullptr) { qDebug() << "[Radial::Init] no channel ptr"; return; diff --git a/seismic_monitor.cpp b/seismic_monitor.cpp index 6d51f68..17e93e1 100644 --- a/seismic_monitor.cpp +++ b/seismic_monitor.cpp @@ -43,12 +43,7 @@ Seismic_monitor::~Seismic_monitor() { } void Seismic_monitor::Init() { -// for (int var = 0; var < vec_transducer.size(); ++var) { -// ui->comboBox_transducer_name_1->addItem(vec_transducer[var].transducer_name); -// ui->comboBox_transducer_name_2->addItem(vec_transducer[var].transducer_name); -// ui->comboBox_transducer_name_3->addItem(vec_transducer[var].transducer_name); -// ui->comboBox_transducer_name_4->addItem(vec_transducer[var].transducer_name); -// } + std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); if (base_ptr == nullptr) { qDebug() << "base_ptr"; @@ -521,10 +516,13 @@ void Seismic_monitor::on_pushButton_config_3_4_clicked() ch3_4->show(); } - +void Seismic_monitor::copy_end_slot(){ + Init(); +} void Seismic_monitor::on_pushButton_copy_channel_clicked() { - CopyChannel *copy_channel = new CopyChannel(); + CopyChannel *copy_channel = new CopyChannel(slot_no); + connect(copy_channel,SIGNAL(copy_end_sg()),this,SLOT(copy_end_slot())); copy_channel->setWindowModality(Qt::ApplicationModal); copy_channel->show(); } diff --git a/seismic_monitor.h b/seismic_monitor.h index dd07162..539d3a6 100644 --- a/seismic_monitor.h +++ b/seismic_monitor.h @@ -63,6 +63,8 @@ class Seismic_monitor : public QWidget { void on_pushButton_copy_channel_clicked(); + void copy_end_slot(); + private: Ui::Seismic_monitor *ui; void UpdateData(std::shared_ptr vib_data); diff --git a/vibrationdata.cpp b/vibrationdata.cpp index a11707c..d62f291 100644 --- a/vibrationdata.cpp +++ b/vibrationdata.cpp @@ -1,5 +1,5 @@ #include "vibrationdata.h" - +#include VibrationData::VibrationData() { } @@ -11,7 +11,18 @@ std::shared_ptr VibrationData::GetChannelPtr(int cid) { } return nullptr; } - +void VibrationData::InsertChannelPtr(std::shared_ptr variable_base){ + variables_.push_back(variable_base); +} +void VibrationData::InsertChannelPtr(std::shared_ptr variable_base){ + variables_.push_back(variable_base); +} +void VibrationData::InsertChannelPtr(std::shared_ptr variable_base){ + variables_.push_back(variable_base); +} +void VibrationData::InsertChannelPtr(std::shared_ptr variable_base){ + variables_.push_back(variable_base); +} void VibrationData::RemoveChannel(int cid) { std::vector> tmp; for (auto &item : variables_) { diff --git a/vibrationdata.h b/vibrationdata.h index f6724a6..207662c 100644 --- a/vibrationdata.h +++ b/vibrationdata.h @@ -10,6 +10,11 @@ class VibrationData : public CardBase { VibrationData(); std::shared_ptr GetChannelPtr(int cid); void RemoveChannel(int cid); + void InsertChannelPtr(std::shared_ptr); + void InsertChannelPtr(std::shared_ptr); + void InsertChannelPtr(std::shared_ptr); + void InsertChannelPtr(std::shared_ptr); + SeismicMonitor base_config_[CHANNEL_COUNT]; std::vector> variables_; VibAlertDanger alert_danger[CHANNEL_COUNT];