#include "DlgVolteParaNo73.h" #include "DevOp.h" #include DlgVolteParaNo73::DlgVolteParaNo73(DevOp *devOp, QWidget *parent) : QDialog(parent) , m_devOp(devOp) { memset(editContinuous, 0, sizeof(editContinuous)); memset(editFull, 0, sizeof(editFull)); memset(editFullRowDelay, 0, sizeof(editFullRowDelay)); memset(editRowDelay, 0, sizeof(editRowDelay)); memset(editHead1RowDelay, 0, sizeof(editHead1RowDelay)); memset(edit1Dot, 0, sizeof(edit1Dot)); memset(editOtherAdjust, 0, sizeof(editOtherAdjust)); memset(edit2Dots, 0, sizeof(edit2Dots)); memset(edit3Dots, 0, sizeof(edit3Dots)); memset(edit4Dots, 0, sizeof(edit4Dots)); memset(edit5Dots, 0, sizeof(edit5Dots)); memset(editGap3Dot, 0, sizeof(editGap3Dot)); memset(editGap, 0, sizeof(editGap)); memset(editBigDot, 0, sizeof(editBigDot)); memset(editGeneralPara, 0, sizeof(editGeneralPara)); setupUI(); } DlgVolteParaNo73::~DlgVolteParaNo73() { } // 创建4列网格布局的tab页(竖排) QWidget* DlgVolteParaNo73::createGridTab(int count, QLineEdit* edits[]) { QWidget *page = new QWidget(this); QGridLayout *grid = new QGridLayout(page); grid->setSpacing(2); grid->setContentsMargins(4, 4, 4, 4); int numCols = 4; int rowsPerCol = (count + numCols - 1) / numCols; for (int i = 0; i < count; i++) { int col = i / rowsPerCol; int row = i % rowsPerCol; QLabel *label = new QLabel(QString("v%1").arg(i), page); label->setFixedWidth(28); label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); QLineEdit *edit = new QLineEdit("0", page); edit->setAlignment(Qt::AlignCenter); edits[i] = edit; grid->addWidget(label, row, col * 2); grid->addWidget(edit, row, col * 2 + 1); } for (int c = 0; c < numCols; c++) { grid->setColumnStretch(c * 2, 0); grid->setColumnStretch(c * 2 + 1, 1); } return page; } void DlgVolteParaNo73::setupUI() { setWindowTitle(QString("No73充电参数编辑")); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setContentsMargins(4, 4, 4, 4); mainLayout->setSpacing(4); tabWidget = new QTabWidget(this); tabWidget->addTab(createGridTab(48, editContinuous), QString("连续电压")); tabWidget->addTab(createGridTab(48, editFullRowDelay), QString("满电延迟")); tabWidget->addTab(createGridTab(48, editRowDelay), QString("点延迟")); tabWidget->addTab(createGridTab(48, editHead1RowDelay), QString("首1点延迟")); tabWidget->addTab(createGridTab(48, editOtherAdjust), QString("其他调整")); tabWidget->addTab(createGridTab(48, editFull), QString("满电")); tabWidget->addTab(createGridTab(48, edit1Dot), QString("单点")); tabWidget->addTab(createGridTab(48, edit2Dots), QString("两点")); tabWidget->addTab(createGridTab(48, edit3Dots), QString("三点")); tabWidget->addTab(createGridTab(48, edit4Dots), QString("四点")); tabWidget->addTab(createGridTab(48, edit5Dots), QString("五点")); tabWidget->addTab(createGridTab(48, editGap3Dot), QString("3_空点")); tabWidget->addTab(createGridTab(48, editGap), QString("空点")); tabWidget->addTab(createGridTab(8, editBigDot), QString("巨点")); tabWidget->addTab(createGridTab(80, editGeneralPara), QString("通用参数")); mainLayout->addWidget(tabWidget); // 底部按钮栏 QHBoxLayout *btnLayout = new QHBoxLayout(); btnLoad = new QPushButton(QString("读取当前值"), this); btnSave = new QPushButton(QString("保存并推送FPGA"), this); btnLoad->setMinimumHeight(40); btnSave->setMinimumHeight(40); btnLayout->addWidget(btnLoad); btnLayout->addStretch(); btnLayout->addWidget(btnSave); mainLayout->addLayout(btnLayout); connect(btnLoad, SIGNAL(clicked()), this, SLOT(onBtnLoadClicked())); connect(btnSave, SIGNAL(clicked()), this, SLOT(onBtnSaveClicked())); } // ========== 数据加载:结构体 → UI ========== void DlgVolteParaNo73::loadDataToUI() { if (!sysPara) return; voltePara_t_No73 &data = sysPara->voltePara_No73; // 连续电压 for (int i = 0; i < 48; i++) editContinuous[i]->setText(QString::number(data.pixel_continous_table[i])); // 满电延迟 for (int i = 0; i < 48; i++) editFullRowDelay[i]->setText(QString::number(data.full_row_delay_table[i])); // 点延迟 for (int i = 0; i < 48; i++) editRowDelay[i]->setText(QString::number(data.row_delay_table[i])); // 首1点延迟 for (int i = 0; i < 48; i++) editHead1RowDelay[i]->setText(QString::number(data.head1_row_delay_table[i])); // 其他调整:steal,head2,head3,tail2 四个值逗号分隔 for (int i = 0; i < 48; i++) { editOtherAdjust[i]->setText(QString("%1,%2,%3,%4") .arg(data.pixel_steal_table[i]) .arg(data.pixel_head2_table[i]) .arg(data.pixel_head3_table[i]) .arg(data.pixel_tail2_table[i])); } // 满电 for (int i = 0; i < 48; i++) editFull[i]->setText(QString::number(data.pixel_full_table[i])); // 单点 for (int i = 0; i < 48; i++) edit1Dot[i]->setText(QString::number(data.pixel_1_table[i])); // 两点(2值逗号分隔) for (int i = 0; i < 48; i++) { edit2Dots[i]->setText(QString("%1,%2") .arg(data.pixel_2_table[i][0]) .arg(data.pixel_2_table[i][1])); } // 三点(3值逗号分隔) for (int i = 0; i < 48; i++) { edit3Dots[i]->setText(QString("%1,%2,%3") .arg(data.pixel_3_table[i][0]) .arg(data.pixel_3_table[i][1]) .arg(data.pixel_3_table[i][2])); } // 四点(4值逗号分隔) for (int i = 0; i < 48; i++) { edit4Dots[i]->setText(QString("%1,%2,%3,%4") .arg(data.pixel_4_table[i][0]) .arg(data.pixel_4_table[i][1]) .arg(data.pixel_4_table[i][2]) .arg(data.pixel_4_table[i][3])); } // 五点(5值逗号分隔) for (int i = 0; i < 48; i++) { edit5Dots[i]->setText(QString("%1,%2,%3,%4,%5") .arg(data.pixel_5_table[i][0]) .arg(data.pixel_5_table[i][1]) .arg(data.pixel_5_table[i][2]) .arg(data.pixel_5_table[i][3]) .arg(data.pixel_5_table[i][4])); } // 3_空点(5值逗号分隔) for (int i = 0; i < 48; i++) { editGap3Dot[i]->setText(QString("%1,%2,%3,%4,%5") .arg(data.pixel_gap_post_3dot_table[i][0]) .arg(data.pixel_gap_post_3dot_table[i][1]) .arg(data.pixel_gap_post_3dot_table[i][2]) .arg(data.pixel_gap_post_3dot_table[i][3]) .arg(data.pixel_gap_post_3dot_table[i][4])); } // 空点(5值逗号分隔) for (int i = 0; i < 48; i++) { editGap[i]->setText(QString("%1,%2,%3,%4,%5") .arg(data.pixel_gap_table[i][0]) .arg(data.pixel_gap_table[i][1]) .arg(data.pixel_gap_table[i][2]) .arg(data.pixel_gap_table[i][3]) .arg(data.pixel_gap_table[i][4])); } // 巨点 pixel_big_table[8][8],每行8个逗号分隔值 for (int i = 0; i < 8; i++) { QString str; for (int j = 0; j < 8; j++) { if (j > 0) str += ","; str += QString::number((qint8)data.pixel_big_table[i][j]); } editBigDot[i]->setText(str); } // 通用参数:前16项为pixel_para_table,后64项为pixel_general_dac_parameter for (int i = 0; i < 16; i++) editGeneralPara[i]->setText(QString::number(data.pixel_para_table[i])); for (int i = 0; i < 64; i++) editGeneralPara[16 + i]->setText(QString::number(data.pixel_general_dac_parameter[i])); } // ========== 数据保存:UI → 结构体 ========== void DlgVolteParaNo73::saveDataFromUI() { if (!sysPara) return; voltePara_t_No73 &data = sysPara->voltePara_No73; // 连续电压 for (int i = 0; i < 48; i++) data.pixel_continous_table[i] = (qint16)editContinuous[i]->text().toInt(); // 满电延迟 for (int i = 0; i < 48; i++) data.full_row_delay_table[i] = (qint16)editFullRowDelay[i]->text().toInt(); // 点延迟 for (int i = 0; i < 48; i++) data.row_delay_table[i] = (qint16)editRowDelay[i]->text().toInt(); // 首1点延迟 for (int i = 0; i < 48; i++) data.head1_row_delay_table[i] = (qint16)editHead1RowDelay[i]->text().toInt(); // 其他调整:steal,head2,head3,tail2 for (int i = 0; i < 48; i++) { QStringList parts = editOtherAdjust[i]->text().split(","); data.pixel_steal_table[i] = parts.size() > 0 ? (qint16)parts[0].toInt() : 0; data.pixel_head2_table[i] = parts.size() > 1 ? (qint16)parts[1].toInt() : 0; data.pixel_head3_table[i] = parts.size() > 2 ? (qint16)parts[2].toInt() : 0; data.pixel_tail2_table[i] = parts.size() > 3 ? (qint16)parts[3].toInt() : 0; } // 满电 for (int i = 0; i < 48; i++) data.pixel_full_table[i] = (qint16)editFull[i]->text().toInt(); // 单点 for (int i = 0; i < 48; i++) data.pixel_1_table[i] = (qint16)edit1Dot[i]->text().toInt(); // 两点 for (int i = 0; i < 48; i++) { QStringList parts = edit2Dots[i]->text().split(","); for (int j = 0; j < 2; j++) data.pixel_2_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 三点 for (int i = 0; i < 48; i++) { QStringList parts = edit3Dots[i]->text().split(","); for (int j = 0; j < 3; j++) data.pixel_3_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 四点 for (int i = 0; i < 48; i++) { QStringList parts = edit4Dots[i]->text().split(","); for (int j = 0; j < 4; j++) data.pixel_4_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 五点 for (int i = 0; i < 48; i++) { QStringList parts = edit5Dots[i]->text().split(","); for (int j = 0; j < 5; j++) data.pixel_5_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 3_空点 for (int i = 0; i < 48; i++) { QStringList parts = editGap3Dot[i]->text().split(","); for (int j = 0; j < 5; j++) data.pixel_gap_post_3dot_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 空点 for (int i = 0; i < 48; i++) { QStringList parts = editGap[i]->text().split(","); for (int j = 0; j < 5; j++) data.pixel_gap_table[i][j] = parts.size() > j ? (qint16)parts[j].toInt() : 0; } // 巨点 for (int i = 0; i < 8; i++) { QStringList parts = editBigDot[i]->text().split(","); for (int j = 0; j < 8; j++) data.pixel_big_table[i][j] = parts.size() > j ? (qint8)parts[j].toInt() : 0; } // 通用参数 for (int i = 0; i < 16; i++) data.pixel_para_table[i] = (qint16)editGeneralPara[i]->text().toInt(); for (int i = 0; i < 64; i++) data.pixel_general_dac_parameter[i] = (qint16)editGeneralPara[16 + i]->text().toInt(); } // ========== 按钮槽函数 ========== void DlgVolteParaNo73::onBtnLoadClicked() { loadDataToUI(); } void DlgVolteParaNo73::onBtnSaveClicked() { saveDataFromUI(); QFile file(DOC_ROOT_DIR"voltePara_No73.bin"); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::information(this, QString("注意"), QString("充电数据已经写入FPGA, 但是没有保存到文件。")); return; } int written = file.write((const char*)&(sysPara->voltePara_No73), sizeof(voltePara_t_No73)); file.close(); if(written != sizeof(voltePara_t_No73)) { QMessageBox::information(this, QString("注意"), QString("写入文件voltePara_No73.bin失败")); } if (m_devOp) { m_devOp->writeDacValue2Fpga_No73(); } QMessageBox::information(this, QString("完成"), QString("充电参数已保存并推送至FPGA。")); }