#include "ShowTempPage.h" #include "ui_ShowTempPage.h" #include #include #include "ShowTemperatureWnd.h" #include "ShowTemperatureListNumberWnd.h" ShowTempPage::ShowTempPage(QWidget *parent) : QWidget(parent) , ui(new Ui::ShowTempPage) { ui->setupUi(this); ui->praTabWidget->tabBar()->hide(); QTimer::singleShot(800, this, [&]() { Init(); }); UpDataParameter(); } ShowTempPage::~ShowTempPage() { delete ui; } void ShowTempPage::Init() { m_manageDB = ns_db::CManageDB::GetInstance(); if (m_manageDB == nullptr) { return; } m_pProduct = m_manageDB->GetCProduct(); if (m_pProduct == nullptr) { return; } setStyleSheet( "QWidget { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6); }" "QLineEdit::disabled { background: #D8D8E3; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }" "QLineEdit { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }" "QPushButton { background: #D0D0E8; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }" // Button background color "QPushButton:hover { background-color: #B0B0D8; }" // Lighter color on hover "QPushButton:pressed { background-color: #A0A0C8; }" // Darker color on press ); InitSerialNumberList(); } std::vector ShowTempPage::FilterTemperatures( const std::vector& originalList) { std::vector filteredList; // 使用 std::map 来存储每个 iId 对应的所有 TEMPERATURE_LIST_STRUCT // map> std::map> groupedById; // 第一次遍历:按 iId 分组 for (const auto& item : originalList) { groupedById[item.iId].push_back(item); } // 遍历每个 iId 组 for (const auto& pair : groupedById) { const int currentId = pair.first; const std::vector& currentGroup = pair.second; // 检查该 iId 组中是否有多个不同的 iSerialNumber std::set serialNumbersInGroup; for (const auto& item : currentGroup) { serialNumbersInGroup.insert(item.iSerialNumber); } // 如果这个 iId 组包含多于一个不同的 iSerialNumber,则将该组的所有元素添加到结果中 if (serialNumbersInGroup.size() > 1) { for (const auto& item : currentGroup) { filteredList.push_back(item); } } } return filteredList; } void ShowTempPage::UpdataUi(int nIndex, int ncurrentGroupIndex, bool isClear/* = false*/) { //if (isClear) { ui->serialNumberList->clear(); } // 释放 int nI = 0; // 筛选出来了 for (const auto& pair : m_groupedById) { if (nI == nIndex) { const int currentId = pair.first; const std::vector& currentGroup = pair.second; for (int i = 0; i < currentGroup.size(); i++) { AddListItem(currentGroup[i], i, ui->serialNumberList, QSize(370, 48)); } UpDataParameter(false, currentGroup[ncurrentGroupIndex]); break; //只要一个 } nI++; } } void ShowTempPage::AddOrDel(int iId, int iSerialNumber, bool isDel) { // 释放 ui->serialNumberList->clear(); int nI = 0; // 筛选出来了 for (auto& pair : m_groupedById) { if (nI == iId) { std::vector& currentGroup = pair.second; if (isDel) { for (int i = 0; i < currentGroup.size(); i++) { if (currentGroup[i].iSerialNumber == iSerialNumber) { currentGroup.erase(currentGroup.begin() + i); /*if (m_pProduct) { m_pProduct->DeleteTemperatureList(currentGroup[i].iId, currentGroup[i].iSerialNumber); }*/ break; } } } else { int nSize = currentGroup.size(); ns_db::TEMPERATURE_LIST_STRUCT _list = {}; if (nSize > 0) { //最大减一 _list = currentGroup[nSize - 1]; } else { _list.iId = ui->idListComboBox->currentText().toInt(); } _list.iSerialNumber += 1; currentGroup.push_back(_list); /* if (m_pProduct) { m_pProduct->AddTemperatureList(_list); }*/ } for (int i = 0; i < currentGroup.size(); i++) { AddListItem(currentGroup[i], i, ui->serialNumberList, QSize(370, 48)); } UpDataParameter(true); break; //只要一个 } nI++; } } void ShowTempPage::InitSerialNumberList() { std::vector vecCurrentTemperatureList = m_pProduct->GetAllTemperatureList(); int n = 0; // 模拟数据 //if (vecCurrentTemperatureList.size() == 0) { for (int i = 0; i < 111; i++) { ns_db::TEMPERATURE_LIST_STRUCT _a = {}; if (n < 6) { _a.iId = i + 1; } else { n = 0; } n++; _a.iSerialNumber = i + 1; vecCurrentTemperatureList.push_back(_a); } } // 第一次遍历:按 iId 分组 for (const auto& item : vecCurrentTemperatureList) { m_groupedById[item.iId].push_back(item); } UpdataUi(0,0); for (int i = 0; i < m_groupedById.size(); i++) { ui->idListComboBox->addItem(QString::number(i)); } } void ShowTempPage::UpDataParameter(bool isDel /*= false*/, const ns_db::TEMPERATURE_LIST_STRUCT temperaturePar /*= {}*/) { if (isDel) { ui->praTabWidget->removeTab(0); m_ShowTemperatureWnd->deleteLater(); m_ShowTemperatureWnd = nullptr; } else { if (m_ShowTemperatureWnd) { UpDataParameter(true); } m_ShowTemperatureWnd = new ShowTemperatureWnd(); m_ShowTemperatureWnd->SetTemperaturePar(temperaturePar); connect(m_ShowTemperatureWnd, &ShowTemperatureWnd::SendModifyTemperatureListSingals, this, &ShowTempPage::GetModifyTemperatureListSlots); ui->praTabWidget->addTab(m_ShowTemperatureWnd, "Parameter Page"); } } template void ShowTempPage::AddListItem(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar, int nIndex,QListWidget* listWidget,const QSize& sizeHint) { Y* pWnd = new Y(this); pWnd->setAttribute(Qt::WA_DeleteOnClose); connect(pWnd, &Y::SendDelTemperatureListSingals, this, &ShowTempPage::GetDelTemperatureListSlots); //connect(pWnd, &Y::SendAddTemperatureListSingals, this, &ShowTempPage::GetAddTemperatureListSlots); //connect(pWnd, &Y::SendModifyTemperatureListSingals, this, &ShowTempPage::GetModifyTemperatureListSlots); pWnd->SetTemperaturePar(temperaturePar, nIndex); QListWidgetItem* item = new QListWidgetItem(); item->setSizeHint(sizeHint); listWidget->addItem(item); listWidget->setItemWidget(item, pWnd); } void ShowTempPage::on_idListComboBox_currentIndexChanged(int index) { UpdataUi(index, 0); } void ShowTempPage::on_serialNumberList_itemSelectionChanged() { QListWidgetItem* selectedItem = ui->serialNumberList->currentItem(); if (selectedItem) { int row = ui->serialNumberList->row(selectedItem); UpdataUi(ui->idListComboBox->currentText().toInt(), row); } } void ShowTempPage::on_addBut_clicked() { AddOrDel(ui->idListComboBox->currentText().toInt(), -1, false); } void ShowTempPage::on_saveAllBut_clicked() { //保存所有 /*if (m_pProduct) { m_pProduct->TemperatureListSaveToDB(); }*/ } void ShowTempPage::GetDelTemperatureListSlots(int iId, int iSerialNumber) { AddOrDel(iId, iSerialNumber, true); } void ShowTempPage::GetModifyTemperatureListSlots(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar) { int nI = 0; for (auto& pair : m_groupedById) { if (nI == temperaturePar.iId) { std::vector& currentGroup = pair.second; for (int i = 0; i < currentGroup.size(); i++) { if (currentGroup[i].iSerialNumber == temperaturePar.iSerialNumber) { // 直接全部替换 currentGroup[i] = temperaturePar; /* if (m_pProduct) { m_pProduct->ModifyTemperatureList(temperaturePar); }*/ break; } } break; //只要一个 } nI++; } }