|
@@ -1,6 +1,6 @@
|
|
#include "WaferProgramPage.h"
|
|
#include "WaferProgramPage.h"
|
|
|
|
|
|
-std::unordered_map<int, bool> WaferProgramPage::idIsUsedMap;
|
|
|
|
|
|
+std::unordered_map<int, bool> WaferProgramPage::m_IdIsUsedMap;
|
|
|
|
|
|
WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
: QWidget(parent)
|
|
: QWidget(parent)
|
|
@@ -12,15 +12,15 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
m_pCProduct->LoadDataByDB();
|
|
m_pCProduct->LoadDataByDB();
|
|
|
|
|
|
// 创建表格
|
|
// 创建表格
|
|
- mergedTable = new QTableWidget(this);
|
|
|
|
- mergedTable->setColumnCount(11); // 11 列,包含 Matrix 和 DieMatrix 的所有字段
|
|
|
|
- mergedTable->setHorizontalHeaderLabels({
|
|
|
|
|
|
+ m_MergedTable = new QTableWidget(this);
|
|
|
|
+ m_MergedTable->setColumnCount(11); // 11 列,包含 Matrix 和 DieMatrix 的所有字段
|
|
|
|
+ m_MergedTable->setHorizontalHeaderLabels({
|
|
"MatrixID", "MatrixRow", "MatrixCol", "LeftTopPoint_Y", "LeftTopPoint_X",
|
|
"MatrixID", "MatrixRow", "MatrixCol", "LeftTopPoint_Y", "LeftTopPoint_X",
|
|
"RightTopPoint_X", "RightTopPoint_Y", "RightBottomPoint_X", "RightBottomPoint_Y",
|
|
"RightTopPoint_X", "RightTopPoint_Y", "RightBottomPoint_X", "RightBottomPoint_Y",
|
|
"DieMatrixId", "NoBondPt"
|
|
"DieMatrixId", "NoBondPt"
|
|
});
|
|
});
|
|
|
|
|
|
- mergedTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
|
|
|
|
|
+ m_MergedTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
|
|
|
|
|
// 创建按钮布局
|
|
// 创建按钮布局
|
|
QHBoxLayout* buttonLayout = new QHBoxLayout();
|
|
QHBoxLayout* buttonLayout = new QHBoxLayout();
|
|
@@ -50,7 +50,7 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
deleteRowButton->setStyleSheet(buttonStyle);
|
|
deleteRowButton->setStyleSheet(buttonStyle);
|
|
updateButton->setStyleSheet(buttonStyle);
|
|
updateButton->setStyleSheet(buttonStyle);
|
|
// 将控件添加到布局
|
|
// 将控件添加到布局
|
|
- mainLayout->addWidget(mergedTable);
|
|
|
|
|
|
+ mainLayout->addWidget(m_MergedTable);
|
|
mainLayout->addLayout(buttonLayout);
|
|
mainLayout->addLayout(buttonLayout);
|
|
setLayout(mainLayout);
|
|
setLayout(mainLayout);
|
|
|
|
|
|
@@ -58,11 +58,11 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
connect(addRowButton, &QPushButton::clicked, this, &WaferProgramPage::addRow);
|
|
connect(addRowButton, &QPushButton::clicked, this, &WaferProgramPage::addRow);
|
|
connect(deleteRowButton, &QPushButton::clicked, this, &WaferProgramPage::deleteRow);
|
|
connect(deleteRowButton, &QPushButton::clicked, this, &WaferProgramPage::deleteRow);
|
|
connect(updateButton, &QPushButton::clicked, this, &WaferProgramPage::updateData);
|
|
connect(updateButton, &QPushButton::clicked, this, &WaferProgramPage::updateData);
|
|
- connect(mergedTable, &QTableWidget::cellChanged, this, &WaferProgramPage::onCellChanged);
|
|
|
|
- connect(mergedTable, &QTableWidget::cellDoubleClicked, this, [=](int row, int column) {
|
|
|
|
|
|
+ connect(m_MergedTable, &QTableWidget::cellChanged, this, &WaferProgramPage::onCellChanged);
|
|
|
|
+ connect(m_MergedTable, &QTableWidget::cellDoubleClicked, this, [=](int row, int column) {
|
|
if (column == 9) {
|
|
if (column == 9) {
|
|
- QComboBox* comboBox = createDieMatrixIdComboBox(m_VecWaferMatrix[row].iDieMatrixId, row);
|
|
|
|
- mergedTable->setCellWidget(row, column, comboBox);
|
|
|
|
|
|
+ QComboBox* comboBox = createDieMatrixIdComboBox(m_vecWaferMatrix[row].iDieMatrixId, row);
|
|
|
|
+ m_MergedTable->setCellWidget(row, column, comboBox);
|
|
comboBox->showPopup(); // 可选:自动展开下拉
|
|
comboBox->showPopup(); // 可选:自动展开下拉
|
|
|
|
|
|
// 记录初始值(以防没有变化)
|
|
// 记录初始值(以防没有变化)
|
|
@@ -71,28 +71,28 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
// 1. 用户选择后立即还原
|
|
// 1. 用户选择后立即还原
|
|
connect(comboBox, QOverload<int>::of(&QComboBox::activated), this, [=](int index) {
|
|
connect(comboBox, QOverload<int>::of(&QComboBox::activated), this, [=](int index) {
|
|
int selectedId = comboBox->itemData(index).toInt();
|
|
int selectedId = comboBox->itemData(index).toInt();
|
|
- m_VecWaferMatrix[row].iDieMatrixId = selectedId;
|
|
|
|
|
|
+ m_vecWaferMatrix[row].iDieMatrixId = selectedId;
|
|
|
|
|
|
- mergedTable->removeCellWidget(row, column);
|
|
|
|
- mergedTable->setItem(row, column, new QTableWidgetItem(QString::number(selectedId)));
|
|
|
|
|
|
+ m_MergedTable->removeCellWidget(row, column);
|
|
|
|
+ m_MergedTable->setItem(row, column, new QTableWidgetItem(QString::number(selectedId)));
|
|
});
|
|
});
|
|
|
|
|
|
// 2. 用户没有选中,仅点击其他地方,触发还原
|
|
// 2. 用户没有选中,仅点击其他地方,触发还原
|
|
connect(comboBox, &QComboBox::hidePopup, this, [=]() {
|
|
connect(comboBox, &QComboBox::hidePopup, this, [=]() {
|
|
// 如果还在表格里,就还原(防止重复)
|
|
// 如果还在表格里,就还原(防止重复)
|
|
- if (mergedTable->cellWidget(row, column) == comboBox) {
|
|
|
|
|
|
+ if (m_MergedTable->cellWidget(row, column) == comboBox) {
|
|
int selectedId = comboBox->currentData().toInt();
|
|
int selectedId = comboBox->currentData().toInt();
|
|
- m_VecWaferMatrix[row].iDieMatrixId = selectedId;
|
|
|
|
|
|
+ m_vecWaferMatrix[row].iDieMatrixId = selectedId;
|
|
|
|
|
|
- mergedTable->removeCellWidget(row, column);
|
|
|
|
- mergedTable->setItem(row, column, new QTableWidgetItem(QString::number(selectedId)));
|
|
|
|
|
|
+ m_MergedTable->removeCellWidget(row, column);
|
|
|
|
+ m_MergedTable->setItem(row, column, new QTableWidgetItem(QString::number(selectedId)));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- connect(mergedTable, &QTableWidget::cellDoubleClicked, this, [=](int row, int column) {
|
|
|
|
|
|
+ connect(m_MergedTable, &QTableWidget::cellDoubleClicked, this, [=](int row, int column) {
|
|
if (column == 10) { // NoBondPt 列
|
|
if (column == 10) { // NoBondPt 列
|
|
- const auto& wafer = m_VecWaferMatrix[row];
|
|
|
|
|
|
+ const auto& wafer = m_vecWaferMatrix[row];
|
|
|
|
|
|
NoBondPtEditDialog dlg(wafer.MatrixRow, wafer.MatrixCol, wafer.VecNoBondPt, this);
|
|
NoBondPtEditDialog dlg(wafer.MatrixRow, wafer.MatrixCol, wafer.VecNoBondPt, this);
|
|
if (dlg.exec() == QDialog::Accepted) {
|
|
if (dlg.exec() == QDialog::Accepted) {
|
|
@@ -100,9 +100,9 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
|
|
QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
|
|
|
|
|
|
// 更新数据结构
|
|
// 更新数据结构
|
|
- m_VecWaferMatrix[row].VecNoBondPt.clear();
|
|
|
|
|
|
+ m_vecWaferMatrix[row].VecNoBondPt.clear();
|
|
for (const auto& pt : selected) {
|
|
for (const auto& pt : selected) {
|
|
- m_VecWaferMatrix[row].VecNoBondPt.push_back(pt);
|
|
|
|
|
|
+ m_vecWaferMatrix[row].VecNoBondPt.push_back(pt);
|
|
}
|
|
}
|
|
|
|
|
|
// 转换为字符串填入表格
|
|
// 转换为字符串填入表格
|
|
@@ -110,7 +110,7 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
for (const auto& pt : selected) {
|
|
for (const auto& pt : selected) {
|
|
ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
|
|
ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
|
|
}
|
|
}
|
|
- mergedTable->setItem(row, column, new QTableWidgetItem(ptList.join(" ")));
|
|
|
|
|
|
+ m_MergedTable->setItem(row, column, new QTableWidgetItem(ptList.join(" ")));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
@@ -126,7 +126,7 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
|
|
|
|
|
|
//创建下拉列表
|
|
//创建下拉列表
|
|
QComboBox* WaferProgramPage::createDieMatrixIdComboBox(int defaultId, int row) {
|
|
QComboBox* WaferProgramPage::createDieMatrixIdComboBox(int defaultId, int row) {
|
|
- QComboBox* comboBox = new QComboBox(mergedTable);
|
|
|
|
|
|
+ QComboBox* comboBox = new QComboBox(m_MergedTable);
|
|
|
|
|
|
// 设置样式,确保在暗色模式下也是白底黑字
|
|
// 设置样式,确保在暗色模式下也是白底黑字
|
|
comboBox->setStyleSheet(R"(
|
|
comboBox->setStyleSheet(R"(
|
|
@@ -144,7 +144,7 @@ QComboBox* WaferProgramPage::createDieMatrixIdComboBox(int defaultId, int row) {
|
|
selection-color: black;
|
|
selection-color: black;
|
|
}
|
|
}
|
|
)");
|
|
)");
|
|
- for (const auto& dieMatrix : m_VecDieMatrixt) {
|
|
|
|
|
|
+ for (const auto& dieMatrix : m_vecDieMatrixt) {
|
|
/*comboBox->addItem(
|
|
/*comboBox->addItem(
|
|
QString("%1 - %2").arg(dieMatrix.MatrixId).arg(QString::fromStdString(dieMatrix.strModuleName)),
|
|
QString("%1 - %2").arg(dieMatrix.MatrixId).arg(QString::fromStdString(dieMatrix.strModuleName)),
|
|
QVariant(dieMatrix.MatrixId)
|
|
QVariant(dieMatrix.MatrixId)
|
|
@@ -167,38 +167,38 @@ void WaferProgramPage::initMergedData() {
|
|
QList<QJsonObject> directories;
|
|
QList<QJsonObject> directories;
|
|
int userPrivilege = 0;//?
|
|
int userPrivilege = 0;//?
|
|
sqlOp.GetDirectories("Dir_Programme", userPrivilege, directories); // 使用相应的表名和权限加载目录
|
|
sqlOp.GetDirectories("Dir_Programme", userPrivilege, directories); // 使用相应的表名和权限加载目录
|
|
- m_VecWaferMatrix = m_pCProduct->GetWaferMatrix();
|
|
|
|
|
|
+ m_vecWaferMatrix = m_pCProduct->GetWaferMatrix();
|
|
|
|
|
|
- for (const PROGRAM_WAFER_MATRIX_STRUCT& wafer : m_VecWaferMatrix) {
|
|
|
|
- int row = mergedTable->rowCount();
|
|
|
|
- mergedTable->insertRow(row);
|
|
|
|
|
|
+ for (const PROGRAM_WAFER_MATRIX_STRUCT& wafer : m_vecWaferMatrix) {
|
|
|
|
+ int row = m_MergedTable->rowCount();
|
|
|
|
+ m_MergedTable->insertRow(row);
|
|
PROGRAM_DIE_MATRIX_STRUCT stDieMatrix;
|
|
PROGRAM_DIE_MATRIX_STRUCT stDieMatrix;
|
|
m_pCProduct->GetDieMatrix(wafer.MatrixId, stDieMatrix);
|
|
m_pCProduct->GetDieMatrix(wafer.MatrixId, stDieMatrix);
|
|
- m_VecDieMatrixt.push_back(stDieMatrix);
|
|
|
|
|
|
+ m_vecDieMatrixt.push_back(stDieMatrix);
|
|
|
|
|
|
// 填充表格数据
|
|
// 填充表格数据
|
|
- mergedTable->setItem(row, 0, new QTableWidgetItem(QString::number(wafer.MatrixId))); // MatrixID
|
|
|
|
- mergedTable->setItem(row, 1, new QTableWidgetItem(QString::number(wafer.MatrixRow))); // MatrixRow
|
|
|
|
- mergedTable->setItem(row, 2, new QTableWidgetItem(QString::number(wafer.MatrixCol))); // MatrixCol
|
|
|
|
- mergedTable->setItem(row, 3, new QTableWidgetItem(QString::number(wafer.LeftTopPoint.y))); // LeftTopPoint_Y
|
|
|
|
- mergedTable->setItem(row, 4, new QTableWidgetItem(QString::number(wafer.LeftTopPoint.x))); // LeftTopPoint_X
|
|
|
|
- mergedTable->setItem(row, 5, new QTableWidgetItem(QString::number(wafer.RightTopPoint.x))); // RightTopPoint_X
|
|
|
|
- mergedTable->setItem(row, 6, new QTableWidgetItem(QString::number(wafer.RightTopPoint.y))); // RightTopPoint_Y
|
|
|
|
- mergedTable->setItem(row, 7, new QTableWidgetItem(QString::number(wafer.RightBottomPoint.x))); // RightBottomPoint_X
|
|
|
|
- mergedTable->setItem(row, 8, new QTableWidgetItem(QString::number(wafer.RightBottomPoint.y))); // RightBottomPoint_Y
|
|
|
|
- mergedTable->setItem(row, 9, new QTableWidgetItem(QString::number(wafer.iDieMatrixId))); // DieMatrixId
|
|
|
|
|
|
+ m_MergedTable->setItem(row, 0, new QTableWidgetItem(QString::number(wafer.MatrixId))); // MatrixID
|
|
|
|
+ m_MergedTable->setItem(row, 1, new QTableWidgetItem(QString::number(wafer.MatrixRow))); // MatrixRow
|
|
|
|
+ m_MergedTable->setItem(row, 2, new QTableWidgetItem(QString::number(wafer.MatrixCol))); // MatrixCol
|
|
|
|
+ m_MergedTable->setItem(row, 3, new QTableWidgetItem(QString::number(wafer.LeftTopPoint.y))); // LeftTopPoint_Y
|
|
|
|
+ m_MergedTable->setItem(row, 4, new QTableWidgetItem(QString::number(wafer.LeftTopPoint.x))); // LeftTopPoint_X
|
|
|
|
+ m_MergedTable->setItem(row, 5, new QTableWidgetItem(QString::number(wafer.RightTopPoint.x))); // RightTopPoint_X
|
|
|
|
+ m_MergedTable->setItem(row, 6, new QTableWidgetItem(QString::number(wafer.RightTopPoint.y))); // RightTopPoint_Y
|
|
|
|
+ m_MergedTable->setItem(row, 7, new QTableWidgetItem(QString::number(wafer.RightBottomPoint.x))); // RightBottomPoint_X
|
|
|
|
+ m_MergedTable->setItem(row, 8, new QTableWidgetItem(QString::number(wafer.RightBottomPoint.y))); // RightBottomPoint_Y
|
|
|
|
+ m_MergedTable->setItem(row, 9, new QTableWidgetItem(QString::number(wafer.iDieMatrixId))); // DieMatrixId
|
|
|
|
|
|
// 填充 NoBondPt 数据
|
|
// 填充 NoBondPt 数据
|
|
QStringList noBondPts;
|
|
QStringList noBondPts;
|
|
for (const XY_LONG_STRUCT& pt : wafer.VecNoBondPt) {
|
|
for (const XY_LONG_STRUCT& pt : wafer.VecNoBondPt) {
|
|
noBondPts.append(QString("(%1,%2)").arg(pt.x).arg(pt.y));
|
|
noBondPts.append(QString("(%1,%2)").arg(pt.x).arg(pt.y));
|
|
}
|
|
}
|
|
- mergedTable->setItem(row, 10, new QTableWidgetItem(noBondPts.join(" "))); // NoBondPt
|
|
|
|
|
|
+ m_MergedTable->setItem(row, 10, new QTableWidgetItem(noBondPts.join(" "))); // NoBondPt
|
|
}
|
|
}
|
|
|
|
|
|
// 调整列宽和行高
|
|
// 调整列宽和行高
|
|
- mergedTable->resizeColumnsToContents();
|
|
|
|
- mergedTable->resizeRowsToContents();
|
|
|
|
|
|
+ m_MergedTable->resizeColumnsToContents();
|
|
|
|
+ m_MergedTable->resizeRowsToContents();
|
|
|
|
|
|
m_isInitializing = false;// 开启信号处理
|
|
m_isInitializing = false;// 开启信号处理
|
|
}
|
|
}
|
|
@@ -206,12 +206,12 @@ void WaferProgramPage::initMergedData() {
|
|
|
|
|
|
void WaferProgramPage::addRow() {
|
|
void WaferProgramPage::addRow() {
|
|
m_isInitializing = true;
|
|
m_isInitializing = true;
|
|
- idIsUsedMap.clear();
|
|
|
|
- for (const auto& wafer : m_VecWaferMatrix) {
|
|
|
|
- idIsUsedMap[wafer.MatrixId] = true;
|
|
|
|
|
|
+ m_IdIsUsedMap.clear();
|
|
|
|
+ for (const auto& wafer : m_vecWaferMatrix) {
|
|
|
|
+ m_IdIsUsedMap[wafer.MatrixId] = true;
|
|
}
|
|
}
|
|
- int row = mergedTable->rowCount();
|
|
|
|
- mergedTable->insertRow(row);
|
|
|
|
|
|
+ int row = m_MergedTable->rowCount();
|
|
|
|
+ m_MergedTable->insertRow(row);
|
|
|
|
|
|
int newId = 1;
|
|
int newId = 1;
|
|
bool idUsed = true;
|
|
bool idUsed = true;
|
|
@@ -221,7 +221,7 @@ void WaferProgramPage::addRow() {
|
|
// idUsed = false; // 假设 ID 没有被使用
|
|
// idUsed = false; // 假设 ID 没有被使用
|
|
|
|
|
|
// // 如果 ID 已存在于 map 中,则说明已被使用
|
|
// // 如果 ID 已存在于 map 中,则说明已被使用
|
|
- // if (idIsUsedMap.find(newId) != idIsUsedMap.end()) {
|
|
|
|
|
|
+ // if (m_IdIsUsedMap.find(newId) != m_IdIsUsedMap.end()) {
|
|
// idUsed = true;
|
|
// idUsed = true;
|
|
// }
|
|
// }
|
|
|
|
|
|
@@ -231,7 +231,7 @@ void WaferProgramPage::addRow() {
|
|
//}
|
|
//}
|
|
//找出最大的ID值
|
|
//找出最大的ID值
|
|
UINT maxId = 0;
|
|
UINT maxId = 0;
|
|
- for (PROGRAM_WAFER_MATRIX_STRUCT& bondMatrix : m_VecWaferMatrix)
|
|
|
|
|
|
+ for (PROGRAM_WAFER_MATRIX_STRUCT& bondMatrix : m_vecWaferMatrix)
|
|
{
|
|
{
|
|
if (bondMatrix.MatrixId > maxId)
|
|
if (bondMatrix.MatrixId > maxId)
|
|
{
|
|
{
|
|
@@ -241,20 +241,20 @@ void WaferProgramPage::addRow() {
|
|
newId = ++maxId;
|
|
newId = ++maxId;
|
|
|
|
|
|
// 为新行添加默认数据
|
|
// 为新行添加默认数据
|
|
- mergedTable->setItem(row, 0, new QTableWidgetItem(QString::number(newId))); // MatrixID 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 1, new QTableWidgetItem("1")); // MatrixRow 默认值为 1
|
|
|
|
- mergedTable->setItem(row, 2, new QTableWidgetItem("1")); // MatrixCol 默认值为 1
|
|
|
|
- mergedTable->setItem(row, 3, new QTableWidgetItem("0")); // LeftTopPoint_Y 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 4, new QTableWidgetItem("0")); // LeftTopPoint_X 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 5, new QTableWidgetItem("0")); // RightTopPoint_X 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 6, new QTableWidgetItem("0")); // RightTopPoint_Y 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 7, new QTableWidgetItem("0")); // RightBottomPoint_X 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 8, new QTableWidgetItem("0")); // RightBottomPoint_Y 默认值为 0
|
|
|
|
- mergedTable->setItem(row, 9, new QTableWidgetItem("0")); // DieMatrixId 默认值为 0
|
|
|
|
|
|
+ m_MergedTable->setItem(row, 0, new QTableWidgetItem(QString::number(newId))); // MatrixID 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 1, new QTableWidgetItem("1")); // MatrixRow 默认值为 1
|
|
|
|
+ m_MergedTable->setItem(row, 2, new QTableWidgetItem("1")); // MatrixCol 默认值为 1
|
|
|
|
+ m_MergedTable->setItem(row, 3, new QTableWidgetItem("0")); // LeftTopPoint_Y 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 4, new QTableWidgetItem("0")); // LeftTopPoint_X 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 5, new QTableWidgetItem("0")); // RightTopPoint_X 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 6, new QTableWidgetItem("0")); // RightTopPoint_Y 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 7, new QTableWidgetItem("0")); // RightBottomPoint_X 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 8, new QTableWidgetItem("0")); // RightBottomPoint_Y 默认值为 0
|
|
|
|
+ m_MergedTable->setItem(row, 9, new QTableWidgetItem("0")); // DieMatrixId 默认值为 0
|
|
/*QComboBox* comboBox = createDieMatrixIdComboBox(0, row);
|
|
/*QComboBox* comboBox = createDieMatrixIdComboBox(0, row);
|
|
- mergedTable->setCellWidget(row, 9, comboBox);*/
|
|
|
|
|
|
+ m_MergedTable->setCellWidget(row, 9, comboBox);*/
|
|
|
|
|
|
- mergedTable->setItem(row, 10, new QTableWidgetItem("")); // NoBondPt 默认值为空
|
|
|
|
|
|
+ m_MergedTable->setItem(row, 10, new QTableWidgetItem("")); // NoBondPt 默认值为空
|
|
|
|
|
|
// 同时更新 PROGRAM_WAFER_MATRIX_STRUCT 数据
|
|
// 同时更新 PROGRAM_WAFER_MATRIX_STRUCT 数据
|
|
PROGRAM_WAFER_MATRIX_STRUCT newMatrix;
|
|
PROGRAM_WAFER_MATRIX_STRUCT newMatrix;
|
|
@@ -267,32 +267,32 @@ void WaferProgramPage::addRow() {
|
|
newMatrix.iDieMatrixId = 0;
|
|
newMatrix.iDieMatrixId = 0;
|
|
newMatrix.VecNoBondPt.clear(); // 默认值为空
|
|
newMatrix.VecNoBondPt.clear(); // 默认值为空
|
|
|
|
|
|
- m_VecWaferMatrix.push_back(newMatrix);
|
|
|
|
|
|
+ m_vecWaferMatrix.push_back(newMatrix);
|
|
// 将新矩阵添加到数据结构中
|
|
// 将新矩阵添加到数据结构中
|
|
//m_pCProduct->AddWaferMatrix(newMatrix, newId);
|
|
//m_pCProduct->AddWaferMatrix(newMatrix, newId);
|
|
m_isInitializing = false;
|
|
m_isInitializing = false;
|
|
}
|
|
}
|
|
|
|
|
|
void WaferProgramPage::deleteRow() {
|
|
void WaferProgramPage::deleteRow() {
|
|
- int currentRow = mergedTable->currentRow();
|
|
|
|
|
|
+ int currentRow = m_MergedTable->currentRow();
|
|
|
|
|
|
- if (currentRow >= 0 && currentRow < mergedTable->rowCount()) {
|
|
|
|
|
|
+ if (currentRow >= 0 && currentRow < m_MergedTable->rowCount()) {
|
|
// 获取 MatrixID(假设第0列是 MatrixID)
|
|
// 获取 MatrixID(假设第0列是 MatrixID)
|
|
- QTableWidgetItem* idItem = mergedTable->item(currentRow, 0);
|
|
|
|
|
|
+ QTableWidgetItem* idItem = m_MergedTable->item(currentRow, 0);
|
|
if (!idItem) return;
|
|
if (!idItem) return;
|
|
|
|
|
|
int matrixID = idItem->text().toInt();
|
|
int matrixID = idItem->text().toInt();
|
|
|
|
|
|
- // 从 mergedTable 删除行
|
|
|
|
- mergedTable->removeRow(currentRow);
|
|
|
|
|
|
+ // 从 m_MergedTable 删除行
|
|
|
|
+ m_MergedTable->removeRow(currentRow);
|
|
|
|
|
|
- // 从 m_VecWaferMatrix 中移除对应项
|
|
|
|
- auto it = std::remove_if(m_VecWaferMatrix.begin(), m_VecWaferMatrix.end(),
|
|
|
|
|
|
+ // 从 m_vecWaferMatrix 中移除对应项
|
|
|
|
+ auto it = std::remove_if(m_vecWaferMatrix.begin(), m_vecWaferMatrix.end(),
|
|
[matrixID](const PROGRAM_WAFER_MATRIX_STRUCT& wafer) {
|
|
[matrixID](const PROGRAM_WAFER_MATRIX_STRUCT& wafer) {
|
|
return wafer.MatrixId == matrixID;
|
|
return wafer.MatrixId == matrixID;
|
|
});
|
|
});
|
|
- if (it != m_VecWaferMatrix.end()) {
|
|
|
|
- m_VecWaferMatrix.erase(it, m_VecWaferMatrix.end());
|
|
|
|
|
|
+ if (it != m_vecWaferMatrix.end()) {
|
|
|
|
+ m_vecWaferMatrix.erase(it, m_vecWaferMatrix.end());
|
|
}
|
|
}
|
|
|
|
|
|
// 同时通知数据管理类删除
|
|
// 同时通知数据管理类删除
|
|
@@ -325,26 +325,26 @@ void WaferProgramPage::updateData() {
|
|
}
|
|
}
|
|
|
|
|
|
// 2. 添加当前表格中的数据
|
|
// 2. 添加当前表格中的数据
|
|
- for (auto& matrix : m_VecWaferMatrix) {
|
|
|
|
|
|
+ for (auto& matrix : m_vecWaferMatrix) {
|
|
int newId = matrix.MatrixId;
|
|
int newId = matrix.MatrixId;
|
|
m_pCProduct->AddWaferMatrix(matrix, newId);
|
|
m_pCProduct->AddWaferMatrix(matrix, newId);
|
|
auto originalData1 = m_pCProduct->GetWaferMatrix();
|
|
auto originalData1 = m_pCProduct->GetWaferMatrix();
|
|
}
|
|
}
|
|
|
|
|
|
- //qDebug() << "WaferMatrix 已同步到模型层,共同步:" << m_VecWaferMatrix.size() << "条记录。";
|
|
|
|
|
|
+ //qDebug() << "WaferMatrix 已同步到模型层,共同步:" << m_vecWaferMatrix.size() << "条记录。";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
void WaferProgramPage::onCellChanged(int row, int column)
|
|
void WaferProgramPage::onCellChanged(int row, int column)
|
|
{
|
|
{
|
|
if (m_isInitializing) return; // 防止初始化时触发
|
|
if (m_isInitializing) return; // 防止初始化时触发
|
|
- if (row >= m_VecWaferMatrix.size()) return;
|
|
|
|
|
|
+ if (row >= m_vecWaferMatrix.size()) return;
|
|
|
|
|
|
- QTableWidgetItem* item = mergedTable->item(row, column);
|
|
|
|
|
|
+ QTableWidgetItem* item = m_MergedTable->item(row, column);
|
|
if (!item) return;
|
|
if (!item) return;
|
|
|
|
|
|
QString value = item->text();
|
|
QString value = item->text();
|
|
- PROGRAM_WAFER_MATRIX_STRUCT& wafer = m_VecWaferMatrix[row];
|
|
|
|
|
|
+ PROGRAM_WAFER_MATRIX_STRUCT& wafer = m_vecWaferMatrix[row];
|
|
|
|
|
|
switch (column) {
|
|
switch (column) {
|
|
case 0: wafer.MatrixId = value.toInt(); break;
|
|
case 0: wafer.MatrixId = value.toInt(); break;
|
|
@@ -374,134 +374,3 @@ void WaferProgramPage::onCellChanged(int row, int column)
|
|
default: break;
|
|
default: break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-// 构造函数实现
|
|
|
|
-NoBondPtEditDialog::NoBondPtEditDialog(int rows, int cols, const std::vector<XY_LONG_STRUCT>& selectedPts, QWidget* parent)
|
|
|
|
- : QDialog(parent)
|
|
|
|
-{
|
|
|
|
- this->setStyleSheet(R"(
|
|
|
|
- QDialog {
|
|
|
|
- background-color: #f0f0f0;
|
|
|
|
- color: black;
|
|
|
|
- }
|
|
|
|
- QPushButton {
|
|
|
|
- background-color: white;
|
|
|
|
- color: black;
|
|
|
|
- border: 1px solid gray;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- }
|
|
|
|
- QPushButton:hover {
|
|
|
|
- background-color: #e0e0e0;
|
|
|
|
- }
|
|
|
|
- )");
|
|
|
|
-
|
|
|
|
- QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
|
|
|
- QGridLayout* gridLayout = new QGridLayout();
|
|
|
|
-
|
|
|
|
- // 初始化已选点集合
|
|
|
|
- for (const auto& pt : selectedPts) {
|
|
|
|
- selectedSet.insert({ pt.x, pt.y });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (int r = 0; r < rows; ++r) {
|
|
|
|
- for (int c = 0; c < cols; ++c) {
|
|
|
|
- QPushButton* btn = new QPushButton(QString("%1,%2").arg(r).arg(c));
|
|
|
|
- btn->setFixedSize(40, 30);
|
|
|
|
-
|
|
|
|
- QPair<int, int> pos(r, c);
|
|
|
|
- buttonMap[btn] = pos;
|
|
|
|
-
|
|
|
|
- bool selected = selectedSet.contains(pos);
|
|
|
|
- btn->setStyleSheet(selected ? "background-color: gray;" : "background-color: lightgreen;");
|
|
|
|
-
|
|
|
|
- connect(btn, &QPushButton::clicked, this, [=]() {
|
|
|
|
- if (selectedSet.contains(pos)) {
|
|
|
|
- selectedSet.remove(pos);
|
|
|
|
- btn->setStyleSheet("background-color: lightgreen;");
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- selectedSet.insert(pos);
|
|
|
|
- btn->setStyleSheet("background-color: gray;");
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- gridLayout->addWidget(btn, r, c);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- mainLayout->addLayout(gridLayout);
|
|
|
|
-
|
|
|
|
- // 底部按钮
|
|
|
|
- QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
|
|
- connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
|
|
|
- connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
|
|
|
- mainLayout->addWidget(buttons);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// 获取选中的点
|
|
|
|
-QVector<XY_LONG_STRUCT> NoBondPtEditDialog::getSelectedPoints() const {
|
|
|
|
- QVector<XY_LONG_STRUCT> result;
|
|
|
|
- for (const auto& pos : selectedSet) {
|
|
|
|
- XY_LONG_STRUCT pt;
|
|
|
|
- pt.x = pos.first;
|
|
|
|
- pt.y = pos.second;
|
|
|
|
- result.append(pt);
|
|
|
|
- }
|
|
|
|
- return result;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void NoBondPtEditDialog::mousePressEvent(QMouseEvent* event) {
|
|
|
|
- if (event->button() == Qt::LeftButton || event->button() == Qt::RightButton) {
|
|
|
|
- dragStart = event->pos();
|
|
|
|
- dragButton = event->button(); // 记录当前拖动按钮
|
|
|
|
-
|
|
|
|
- if (!rubberBand)
|
|
|
|
- rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
|
|
|
|
- rubberBand->setGeometry(QRect(dragStart, QSize()));
|
|
|
|
- rubberBand->show();
|
|
|
|
- isDragging = true;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-void NoBondPtEditDialog::mouseMoveEvent(QMouseEvent* event) {
|
|
|
|
- if (isDragging && rubberBand) {
|
|
|
|
- rubberBand->setGeometry(QRect(dragStart, event->pos()).normalized());
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void NoBondPtEditDialog::mouseReleaseEvent(QMouseEvent* event) {
|
|
|
|
- if (!rubberBand || !isDragging || event->button() != dragButton) return;
|
|
|
|
-
|
|
|
|
- rubberBand->hide();
|
|
|
|
- QRect selectionRect = rubberBand->geometry();
|
|
|
|
-
|
|
|
|
- for (auto it = buttonMap.begin(); it != buttonMap.end(); ++it) {
|
|
|
|
- QPushButton* btn = it.key();
|
|
|
|
- QPair<int, int> pos = it.value();
|
|
|
|
-
|
|
|
|
- if (btn->geometry().intersects(selectionRect)) {
|
|
|
|
- if (dragButton == Qt::LeftButton) {
|
|
|
|
- // toggle:如果选中就取消,否则加入
|
|
|
|
- if (selectedSet.contains(pos)) {
|
|
|
|
- selectedSet.remove(pos);
|
|
|
|
- btn->setStyleSheet("background-color: lightgreen;");
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- selectedSet.insert(pos);
|
|
|
|
- btn->setStyleSheet("background-color: gray;");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else if (dragButton == Qt::RightButton) {
|
|
|
|
- // 强制取消
|
|
|
|
- selectedSet.remove(pos);
|
|
|
|
- btn->setStyleSheet("background-color: lightgreen;");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- isDragging = false;
|
|
|
|
- dragButton = Qt::NoButton;
|
|
|
|
-}
|
|
|
|
-
|
|
|