#include "DlgVoltePara25Dots.h" #include "DevOp.h" #include #include #include #include DlgVoltePara25Dots::DlgVoltePara25Dots(DevOp *devOp, QWidget *parent) : QDialog(parent) , m_devOp(devOp) , tableSingleDot1(nullptr) , tableSingleDotFirst1(nullptr) , table2Dots(nullptr) , table3Dots(nullptr) , table4Dots(nullptr) , table5Dots(nullptr) , tableContinuous(nullptr) , tableDiffVoltage(nullptr) , tableExtraLine(nullptr) , tableFirstOnePointExtra(nullptr) , tableAdjustPara(nullptr) , tableGiantPoint(nullptr) { setupUI(); } DlgVoltePara25Dots::~DlgVoltePara25Dots() { } // 创建通用表格 QTableWidget* DlgVoltePara25Dots::createTable(int rows, int cols, int minVal, int maxVal) { QTableWidget *table = new QTableWidget(rows, cols, this); table->setMinimumHeight(200); // 设置行头(通道编号) QStringList rowHeaders; for (int i = 0; i < rows; i++) { rowHeaders << QString::number(i); } table->setVerticalHeaderLabels(rowHeaders); // 设置列头(点序号) QStringList colHeaders; for (int i = 0; i < cols; i++) { if (cols == 1) colHeaders << QString("值"); else colHeaders << QString("点%1").arg(i + 1); } table->setHorizontalHeaderLabels(colHeaders); // 初始化所有单元格为 0 for (int r = 0; r < rows; r++) { for (int c = 0; c < cols; c++) { QTableWidgetItem *item = new QTableWidgetItem("0"); item->setTextAlignment(Qt::AlignCenter); table->setItem(r, c, item); } } // 设置行高适配触屏 table->verticalHeader()->setDefaultSectionSize(30); table->horizontalHeader()->setDefaultSectionSize(60); Q_UNUSED(minVal); Q_UNUSED(maxVal); return table; } void DlgVoltePara25Dots::setupUI() { setWindowTitle(QString("25点阵充电参数编辑")); resize(800, 600); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setContentsMargins(4, 4, 4, 4); mainLayout->setSpacing(4); // 选项卡 tabWidget = new QTabWidget(this); tabWidget->addTab(createTab_SingleDot(), QString("单点")); tabWidget->addTab(createTab_2Dots(), QString("2点连续")); tabWidget->addTab(createTab_3Dots(), QString("3点连续")); tabWidget->addTab(createTab_4Dots(), QString("4点连续")); tabWidget->addTab(createTab_5Dots(), QString("5点连续")); tabWidget->addTab(createTab_Continuous(), QString("连续点")); tabWidget->addTab(createTab_DiffVoltage(), QString("差分补偿")); tabWidget->addTab(createTab_ExtraLine(), QString("行补偿")); tabWidget->addTab(createTab_GiantPoint(), 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())); } // ========== 选项卡创建 ========== QWidget* DlgVoltePara25Dots::createTab_SingleDot() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); QLabel *label1 = new QLabel(QString("单点 DAC (matchTotalTableDACArray1)"), page); tableSingleDot1 = createTable(64, 1, 0, 65535); layout->addWidget(label1); layout->addWidget(tableSingleDot1); QLabel *label2 = new QLabel(QString("首单点 DAC (matchTotalTableDACArrayFirst1)"), page); tableSingleDotFirst1 = createTable(64, 1, 0, 65535); layout->addWidget(label2); layout->addWidget(tableSingleDotFirst1); return page; } QWidget* DlgVoltePara25Dots::createTab_2Dots() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); table2Dots = createTable(64, 2, 0, 65535); layout->addWidget(table2Dots); return page; } QWidget* DlgVoltePara25Dots::createTab_3Dots() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); table3Dots = createTable(64, 3, 0, 65535); layout->addWidget(table3Dots); return page; } QWidget* DlgVoltePara25Dots::createTab_4Dots() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); table4Dots = createTable(64, 4, 0, 65535); layout->addWidget(table4Dots); return page; } QWidget* DlgVoltePara25Dots::createTab_5Dots() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); table5Dots = createTable(64, 5, 0, 65535); layout->addWidget(table5Dots); return page; } QWidget* DlgVoltePara25Dots::createTab_Continuous() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); QLabel *label = new QLabel(QString("连续点 DAC (matchContinousDACArray)"), page); tableContinuous = createTable(64, 1, 0, 65535); layout->addWidget(label); layout->addWidget(tableContinuous); return page; } QWidget* DlgVoltePara25Dots::createTab_DiffVoltage() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); QLabel *label = new QLabel(QString("差分电压补偿 (matchTotalDiffVoltageValue) [50×64]"), page); tableDiffVoltage = createTable(50, 64, -128, 127); layout->addWidget(label); layout->addWidget(tableDiffVoltage); return page; } QWidget* DlgVoltePara25Dots::createTab_ExtraLine() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); QLabel *label1 = new QLabel(QString("额外行补偿 (matchExtraLineDACArray)"), page); tableExtraLine = createTable(64, 1, 0, 255); layout->addWidget(label1); layout->addWidget(tableExtraLine); QLabel *label2 = new QLabel(QString("首单点行补偿 (matchFirstOnePointExtraLineDACArray)"), page); tableFirstOnePointExtra = createTable(64, 1, -128, 127); layout->addWidget(label2); layout->addWidget(tableFirstOnePointExtra); return page; } QWidget* DlgVoltePara25Dots::createTab_GiantPoint() { QWidget *page = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(page); QLabel *label1 = new QLabel(QString("巨点调整参数 (matchAdjustParaDACArray) [8]"), page); tableAdjustPara = createTable(8, 1, -128, 127); layout->addWidget(label1); layout->addWidget(tableAdjustPara); QLabel *label2 = new QLabel(QString("巨点电压补偿 (matchGiantPointVoltageValue) [16×64]"), page); tableGiantPoint = createTable(16, 64, -128, 127); layout->addWidget(label2); layout->addWidget(tableGiantPoint); return page; } // ========== 数据加载:结构体 → UI ========== void DlgVoltePara25Dots::loadDataToUI() { if (!sysPara) return; voltePara_t_25Dots &data = sysPara->voltePara_25Dots; // matchTotalTableDACArray1[64] for (int i = 0; i < 64; i++) { tableSingleDot1->item(i, 0)->setText(QString::number(data.matchTotalTableDACArray1[i])); } // matchTotalTableDACArrayFirst1[64] for (int i = 0; i < 64; i++) { tableSingleDotFirst1->item(i, 0)->setText(QString::number(data.matchTotalTableDACArrayFirst1[i])); } // matchTotalTableDACArray2[64][2] for (int i = 0; i < 64; i++) { for (int j = 0; j < 2; j++) { table2Dots->item(i, j)->setText(QString::number(data.matchTotalTableDACArray2[i][j])); } } // matchTotalTableDACArray3[64][3] for (int i = 0; i < 64; i++) { for (int j = 0; j < 3; j++) { table3Dots->item(i, j)->setText(QString::number(data.matchTotalTableDACArray3[i][j])); } } // matchTotalTableDACArray4[64][4] for (int i = 0; i < 64; i++) { for (int j = 0; j < 4; j++) { table4Dots->item(i, j)->setText(QString::number(data.matchTotalTableDACArray4[i][j])); } } // matchTotalTableDACArray5[64][5] for (int i = 0; i < 64; i++) { for (int j = 0; j < 5; j++) { table5Dots->item(i, j)->setText(QString::number(data.matchTotalTableDACArray5[i][j])); } } // matchContinousDACArray[64] for (int i = 0; i < 64; i++) { tableContinuous->item(i, 0)->setText(QString::number(data.matchContinousDACArray[i])); } // matchTotalDiffVoltageValue[50][64] for (int i = 0; i < 50; i++) { for (int j = 0; j < 64; j++) { tableDiffVoltage->item(i, j)->setText(QString::number((qint8)data.matchTotalDiffVoltageValue[i][j])); } } // matchExtraLineDACArray[64] for (int i = 0; i < 64; i++) { tableExtraLine->item(i, 0)->setText(QString::number(data.matchExtraLineDACArray[i])); } // matchFirstOnePointExtraLineDACArray[64] for (int i = 0; i < 64; i++) { tableFirstOnePointExtra->item(i, 0)->setText(QString::number((qint8)data.matchFirstOnePointExtraLineDACArray[i])); } // matchAdjustParaDACArray[8] for (int i = 0; i < 8; i++) { tableAdjustPara->item(i, 0)->setText(QString::number((qint8)data.matchAdjustParaDACArray[i])); } // matchGiantPointVoltageValue[16][64] for (int i = 0; i < 16; i++) { for (int j = 0; j < 64; j++) { tableGiantPoint->item(i, j)->setText(QString::number((qint8)data.matchGiantPointVoltageValue[i][j])); } } } // ========== 数据保存:UI → 结构体 ========== void DlgVoltePara25Dots::saveDataFromUI() { if (!sysPara) return; voltePara_t_25Dots &data = sysPara->voltePara_25Dots; // matchTotalTableDACArray1[64] for (int i = 0; i < 64; i++) { data.matchTotalTableDACArray1[i] = (quint16)tableSingleDot1->item(i, 0)->text().toUInt(); } // matchTotalTableDACArrayFirst1[64] for (int i = 0; i < 64; i++) { data.matchTotalTableDACArrayFirst1[i] = (quint16)tableSingleDotFirst1->item(i, 0)->text().toUInt(); } // matchTotalTableDACArray2[64][2] for (int i = 0; i < 64; i++) { for (int j = 0; j < 2; j++) { data.matchTotalTableDACArray2[i][j] = (quint16)table2Dots->item(i, j)->text().toUInt(); } } // matchTotalTableDACArray3[64][3] for (int i = 0; i < 64; i++) { for (int j = 0; j < 3; j++) { data.matchTotalTableDACArray3[i][j] = (quint16)table3Dots->item(i, j)->text().toUInt(); } } // matchTotalTableDACArray4[64][4] for (int i = 0; i < 64; i++) { for (int j = 0; j < 4; j++) { data.matchTotalTableDACArray4[i][j] = (quint16)table4Dots->item(i, j)->text().toUInt(); } } // matchTotalTableDACArray5[64][5] for (int i = 0; i < 64; i++) { for (int j = 0; j < 5; j++) { data.matchTotalTableDACArray5[i][j] = (quint16)table5Dots->item(i, j)->text().toUInt(); } } // matchContinousDACArray[64] for (int i = 0; i < 64; i++) { data.matchContinousDACArray[i] = (quint16)tableContinuous->item(i, 0)->text().toUInt(); } // matchTotalDiffVoltageValue[50][64] for (int i = 0; i < 50; i++) { for (int j = 0; j < 64; j++) { data.matchTotalDiffVoltageValue[i][j] = (qint8)tableDiffVoltage->item(i, j)->text().toInt(); } } // matchExtraLineDACArray[64] for (int i = 0; i < 64; i++) { data.matchExtraLineDACArray[i] = (quint8)tableExtraLine->item(i, 0)->text().toUInt(); } // matchFirstOnePointExtraLineDACArray[64] for (int i = 0; i < 64; i++) { data.matchFirstOnePointExtraLineDACArray[i] = (qint8)tableFirstOnePointExtra->item(i, 0)->text().toInt(); } // matchAdjustParaDACArray[8] for (int i = 0; i < 8; i++) { data.matchAdjustParaDACArray[i] = (qint8)tableAdjustPara->item(i, 0)->text().toInt(); } // matchGiantPointVoltageValue[16][64] for (int i = 0; i < 16; i++) { for (int j = 0; j < 64; j++) { data.matchGiantPointVoltageValue[i][j] = (qint8)tableGiantPoint->item(i, j)->text().toInt(); } } } // ========== 按钮槽函数 ========== void DlgVoltePara25Dots::onBtnLoadClicked() { loadDataToUI(); } void DlgVoltePara25Dots::onBtnSaveClicked() { int ret = QMessageBox::question(this, QString("确认"), QString("确定要将修改后的充电参数写入FPGA吗?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (ret != QMessageBox::Yes) return; saveDataFromUI(); if (m_devOp) { m_devOp->writeDacValue2Fpga_No72NewVoltData(); } QMessageBox::information(this, QString("完成"), QString("充电参数已保存并推送至FPGA。")); }