add copy channel config

This commit is contained in:
DESKTOP-7I8SUIC\zhang 2025-09-27 21:34:27 +08:00
parent 226f3acc24
commit 8d66507e83
8 changed files with 125 additions and 13 deletions

View File

@ -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 <QMessageBox>
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<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
if (base_ptr == nullptr) {
qDebug() << "base_ptr";
return;
}
std::shared_ptr<VibrationData> vib_data = std::dynamic_pointer_cast<VibrationData>(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<RadialVariable> variable = std::dynamic_pointer_cast<RadialVariable>(variable_base_old);
std::shared_ptr<RadialVariable> variable_new = std::make_shared<RadialVariable>();
*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<AccVelVariable> variable = std::dynamic_pointer_cast<AccVelVariable>(variable_base_old);
std::shared_ptr<AccVelVariable> variable_new = std::make_shared<AccVelVariable>();
*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<ThrustVariable> variable = std::dynamic_pointer_cast<ThrustVariable>(variable_base_old);
std::shared_ptr<ThrustVariable> variable_new = std::make_shared<ThrustVariable>();
*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<PressurePulsationVariable> variable = std::dynamic_pointer_cast<PressurePulsationVariable>(variable_base_old);
std::shared_ptr<PressurePulsationVariable> variable_new = std::make_shared<PressurePulsationVariable>();
*variable_new = *variable;
variable_new->id_ = i + 1;
vib_data->RemoveChannel(i + 1);
vib_data->InsertChannelPtr(variable_new);
}
}
}
emit copy_end_sg();
this->close();
}

View File

@ -2,7 +2,8 @@
#define COPY_CHANNEL_H
#include <QWidget>
#include <QRadioButton>
#include <QCheckBox>
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<QRadioButton*> radio_btn;
QList<QCheckBox*> check_ch;
};
#endif // COPY_CHANNEL_H

View File

@ -62,6 +62,9 @@
<property name="text">
<string>通道1</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
@ -133,6 +136,9 @@
<property name="text">
<string>通道1</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_ch2">
<property name="geometry">

View File

@ -56,6 +56,7 @@ void Radial::Init() {
return;
}
std::shared_ptr<VariableBase> variable_base = ptr->GetChannelPtr(channel);
if (variable_base == nullptr) {
qDebug() << "[Radial::Init] no channel ptr";
return;

View File

@ -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<CardBase> 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();
}

View File

@ -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<VibrationData> vib_data);

View File

@ -1,5 +1,5 @@
#include "vibrationdata.h"
#include <QDebug>
VibrationData::VibrationData() {
}
@ -11,7 +11,18 @@ std::shared_ptr<VariableBase> VibrationData::GetChannelPtr(int cid) {
}
return nullptr;
}
void VibrationData::InsertChannelPtr(std::shared_ptr<RadialVariable> variable_base){
variables_.push_back(variable_base);
}
void VibrationData::InsertChannelPtr(std::shared_ptr<AccVelVariable> variable_base){
variables_.push_back(variable_base);
}
void VibrationData::InsertChannelPtr(std::shared_ptr<ThrustVariable> variable_base){
variables_.push_back(variable_base);
}
void VibrationData::InsertChannelPtr(std::shared_ptr<PressurePulsationVariable> variable_base){
variables_.push_back(variable_base);
}
void VibrationData::RemoveChannel(int cid) {
std::vector<std::shared_ptr<VariableBase>> tmp;
for (auto &item : variables_) {

View File

@ -10,6 +10,11 @@ class VibrationData : public CardBase {
VibrationData();
std::shared_ptr<VariableBase> GetChannelPtr(int cid);
void RemoveChannel(int cid);
void InsertChannelPtr(std::shared_ptr<RadialVariable>);
void InsertChannelPtr(std::shared_ptr<AccVelVariable>);
void InsertChannelPtr(std::shared_ptr<ThrustVariable>);
void InsertChannelPtr(std::shared_ptr<PressurePulsationVariable>);
SeismicMonitor base_config_[CHANNEL_COUNT];
std::vector<std::shared_ptr<VariableBase>> variables_;
VibAlertDanger alert_danger[CHANNEL_COUNT];