#include "dc_outputs.h" #include "ui_dc_outputs.h" #include #include "dc_output_channel.h" #include #include "config_mgr.h" #include "data_config.h" #include "vibrationdata.h" DC_Outputs::DC_Outputs(int slot_no_,int cardtype,QWidget *parent) : QWidget(parent), ui(new Ui::DC_Outputs) { ui->setupUi(this); ui->comboBox_ch_output->setView(new QListView()); slot_no = slot_no_; car_type = static_cast(cardtype); memset(channel_used,0,sizeof(channel_used)); current_index = ui->comboBox_ch_output->currentIndex(); Init(); } DC_Outputs::~DC_Outputs() { delete ui; } void DC_Outputs::Init(){ std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); if (base_ptr == nullptr) { qCritical() << "[Acceleration::Init] should not be here"; return; } std::shared_ptr ptr = std::dynamic_pointer_cast(base_ptr); std::shared_ptr variable_base = ptr->GetChannelPtr(current_index + 1); if (variable_base == nullptr) { qDebug() << "[DC_Outputs::Init] no channel ptr"; return; } if(variable_base->dc_output[0].output_channel == 1){ ui->label_ch_1->setText("通道1"); ui->label_ch_1_min->setText(QString::number(variable_base->dc_output[0].minmum)); ui->label_ch_1_max->setText(QString::number(variable_base->dc_output[0].maxmum)); } if(variable_base->dc_output[0].output_channel == 2){ ui->label_ch_2->setText("通道2"); ui->label_ch_2_min->setText(QString::number(variable_base->dc_output[1].minmum)); ui->label_ch_2_max->setText(QString::number(variable_base->dc_output[1].maxmum)); } if(variable_base->dc_output[0].output_channel == 3){ ui->label_ch_3->setText("通道3"); ui->label_ch_3_min->setText(QString::number(variable_base->dc_output[2].minmum)); ui->label_ch_3_max->setText(QString::number(variable_base->dc_output[2].maxmum)); } if(variable_base->dc_output[0].output_channel == 4){ ui->label_ch_4->setText("通道4"); ui->label_ch_4_min->setText(QString::number(variable_base->dc_output[3].minmum)); ui->label_ch_4_max->setText(QString::number(variable_base->dc_output[3].maxmum)); } } void DC_Outputs::on_comboBox_ch_output_activated(int index) { DC_Output_Channel *dc_output_channel = new DC_Output_Channel(); dc_output_channel->setWindowModality(Qt::ApplicationModal); connect(dc_output_channel,SIGNAL(output_channel_data_sg(int,float,float)),this,SLOT(output_channel_data(int,float,float))); dc_output_channel->show(); } void DC_Outputs::output_channel_data(int channel,float minmun,float maxmum){ qDebug() << channel << minmun << maxmum ; if(channel == 1){ ui->label_ch_1->setText("通道1"); ui->label_ch_1_min->setText(QString::number(minmun)); ui->label_ch_1_max->setText(QString::number(maxmum)); }else if(channel == 2){ ui->label_ch_2->setText("通道2"); ui->label_ch_2_min->setText(QString::number(minmun)); ui->label_ch_2_max->setText(QString::number(maxmum)); }else if(channel == 3){ ui->label_ch_3->setText("通道3"); ui->label_ch_3_min->setText(QString::number(minmun)); ui->label_ch_3_max->setText(QString::number(maxmum)); }else if(channel == 4){ ui->label_ch_4->setText("通道4"); ui->label_ch_4_min->setText(QString::number(minmun)); ui->label_ch_4_max->setText(QString::number(maxmum)); } } void DC_Outputs::on_pushButton_confirm_clicked() { std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); if (base_ptr == nullptr) { qCritical() << "[Acceleration::Init] should not be here"; return; } std::shared_ptr ptr = std::dynamic_pointer_cast(base_ptr); std::shared_ptr variable_base = ptr->GetChannelPtr(current_index); if (variable_base == nullptr ) { return ; } if(ui->label_ch_1->text() != "未使用"){ variable_base->dc_output[0].output_channel = 1; variable_base->dc_output[0].minmum = ui->label_ch_1_min->text().toFloat(); variable_base->dc_output[0].maxmum = ui->label_ch_1_max->text().toFloat(); } if(ui->label_ch_2->text() != "未使用"){ variable_base->dc_output[1].output_channel = 2; variable_base->dc_output[1].minmum = ui->label_ch_2_min->text().toFloat(); variable_base->dc_output[1].maxmum = ui->label_ch_2_max->text().toFloat(); } if(ui->label_ch_3->text() != "未使用"){ variable_base->dc_output[2].output_channel = 3; variable_base->dc_output[2].minmum = ui->label_ch_3_min->text().toFloat(); variable_base->dc_output[2].maxmum = ui->label_ch_3_max->text().toFloat(); } if(ui->label_ch_4->text() != "未使用"){ variable_base->dc_output[3].output_channel = 4; variable_base->dc_output[3].minmum = ui->label_ch_4_min->text().toFloat(); variable_base->dc_output[3].maxmum = ui->label_ch_4_max->text().toFloat(); } ptr->variables_.push_back(variable_base); this->close(); } void DC_Outputs::on_pushButton_cancel_clicked() { this->close(); }