Files
VX5_KRO_GearPump/DlgVoltePara25Dots.cpp
T
2026-05-23 14:16:57 +08:00

424 lines
13 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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。"));
}