123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- #include "ShowTempPage.h"
- #include "ui_ShowTempPage.h"
- #include <QTimer>
- #include <set>
- #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<ns_db::TEMPERATURE_LIST_STRUCT> ShowTempPage::FilterTemperatures(
- const std::vector<ns_db::TEMPERATURE_LIST_STRUCT>& originalList)
- {
- std::vector<ns_db::TEMPERATURE_LIST_STRUCT> filteredList;
- // 使用 std::map 来存储每个 iId 对应的所有 TEMPERATURE_LIST_STRUCT
- // map<iId, vector<TEMPERATURE_LIST_STRUCT>>
- std::map<int, std::vector<ns_db::TEMPERATURE_LIST_STRUCT>> 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<ns_db::TEMPERATURE_LIST_STRUCT>& currentGroup = pair.second;
- // 检查该 iId 组中是否有多个不同的 iSerialNumber
- std::set<int> 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<ns_db::TEMPERATURE_LIST_STRUCT>& currentGroup = pair.second;
- for (int i = 0; i < currentGroup.size(); i++)
- {
- AddListItem<ShowTemperatureListNumberWnd>(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<ns_db::TEMPERATURE_LIST_STRUCT>& 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<ShowTemperatureListNumberWnd>(currentGroup[i], i, ui->serialNumberList, QSize(370, 48));
- }
- UpDataParameter(true);
- break; //只要一个
- }
- nI++;
- }
- }
- void ShowTempPage::InitSerialNumberList()
- {
- std::vector <ns_db::TEMPERATURE_LIST_STRUCT> 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 <typename Y>
- 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<ns_db::TEMPERATURE_LIST_STRUCT>& 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++;
- }
- }
|