2026年5月23日暂存
This commit is contained in:
@@ -0,0 +1,423 @@
|
||||
#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。"));
|
||||
}
|
||||
Reference in New Issue
Block a user