424 lines
13 KiB
C++
424 lines
13 KiB
C++
#include "DlgVoltePara25Dots.h"
|
||
#include "DevOp.h"
|
||
#include <QHeaderView>
|
||
#include <QIntValidator>
|
||
#include <QLineEdit>
|
||
#include <QScrollArea>
|
||
|
||
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。"));
|
||
}
|