123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- // *****************************************************************************
- // 版权所有(C)2023~2099 上海骄成超声波技术有限公司
- // 保留所有权利
- // *****************************************************************************
- // 作者 : 杨坚
- // 版本 : 1.0
- // 功能说明:
- //
- // *****************************************************************************
- #include "ShowTemperaturePage.h"
- #include "ShowTemperatureWnd.h"
- #include "ShowTemperatureListNumberWnd.h"
- #include "Src/RewriteControl/JListWidget.h"
- #include "QTimer"
- ShowTemperaturePage::ShowTemperaturePage(QWidget *parent)
- : QWidget(parent)
- {
- ui.setupUi(this);
- ui.addValBut->hide();
- QTimer::singleShot(800, this, [&]() { Init(); });
- }
- ShowTemperaturePage::~ShowTemperaturePage()
- {}
- void ShowTemperaturePage::Init()
- {
- // 排序
- auto Fun = [&](QListWidget* p)
- {
- // 1. 创建一个临时的 vector 来保存重新排序的数据
- std::vector<ns_db::TEMPERATURE_LIST_STRUCT> tempVector(m_vecTemperatureListPage.size());
- // 2. 遍历 listWidget,根据当前 listWidget 的顺序将数据复制到 tempVector
- for (int i = 0; i < p->count(); ++i)
- {
- QString itemText = p->item(i)->text();
- // 在原始 dataVector 中找到该 itemText 对应的索引
- //auto it = std::find(m_vecTemperatureListPage.begin(), m_vecTemperatureListPage.end(), itemText);
- //if (it != m_vecTemperatureListPage.end())
- //{
- // int index = std::distance(m_vecTemperatureListPage.begin(), it);
- // //tempVector[i] = m_vecTemperatureListPage[index]; // 使用原始数据 vector 中的值,避免引用问题
- //}
- }
- // 3. 将 tempVector 赋值回 dataVector,完成排序
- m_vecTemperatureListPage = tempVector;
- };
- // 拖拽关联
- //connect(ui.SerialNumberList, &JListWidget::itemsReordered, [&]()
- // {
- // Fun(ui.SerialNumberList);
- // // 先清空
- // ui.showlist->clear();
- // for (int i = 0; i < m_vecTemperatureListPage.size(); i++)
- // {
- // AddListItem<ShowTemperatureListNumberWnd>(m_vecTemperatureListPage[i],
- // i, ui.SerialNumberList, QSize(370, 48));
- // }
- //});
- connect(ui.SerialNumberList, &QListWidget::itemSelectionChanged,
- [&]() {
- bool isDel = false;
- QListWidgetItem* selectedItem = ui.SerialNumberList->currentItem();
- if (selectedItem)
- {
- int row = ui.SerialNumberList->row(selectedItem);
- if (m_isDel)
- {
- if (m_row == row)
- {
- isDel = true;
- }
- }
- else
- {
- row = m_row;
- std::vector<ns_db::TEMPERATURE_LIST_STRUCT> vecTemperatureList = m_vecTemperatureListPage;
- if (vecTemperatureList.size() > 0 && vecTemperatureList.size() >= row)
- {
- // 更改
- if (ui.showlist->count() > 0)
- {
- // 表示有的情况
- ShowTemperatureWnd* pShow = qobject_cast<ShowTemperatureWnd*>(ui.showlist->itemWidget(ui.showlist->item(0)));
- //pShow->SetTemperaturePar(vecTemperatureList[row], row);
- }
- else
- {
- AddListItem<ShowTemperatureWnd>(vecTemperatureList[row], 0, ui.showlist, QSize(370, 393));
- }
- /*m_row = row;*/
- }
- else
- {
- isDel = true;
- }
- /*m_row = row;*/
- }
- }
- else
- {
- isDel = true;
- }
- if (isDel)
- {
- if (ui.showlist->count() > 0)
- {
- DeleteSelectedItem(-1, ui.showlist);
- }
- }
- });
- m_manageDB = ns_db::CManageDB::GetInstance();
- if (m_manageDB == nullptr) return;
- m_pProduct = m_manageDB->GetCProduct();
- if (m_pProduct == nullptr) return;
- UpTemperList(-1);
- setStyleSheet(
- //"QWidget { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6); }"
- "QDoubleSpinBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
- "QSpinBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
- "QLineEdit { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
- "QCheckBox::indicator { width: 20px; height: 20px; }"
- "QCheckBox::indicator:unchecked { background-color: #FFFFFF; border-radius: 2px; }"
- "QComboBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
- "QComboBox::drop-down { width: 20px; }"
- "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
- );
- }
- //void ShowTemperaturePage::AddTemperList(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar, int nIndex)
- //{
- // ShowTemperatureWnd* pWnd = new ShowTemperatureWnd(this);
- // pWnd->SetTemperaturePar(temperaturePar, nIndex);
- // connect(pWnd, &ShowTemperatureWnd::SendDelTemperatureListSingals, this,
- // &ShowTemperaturePage::GetDelTemperatureListSlots);
- //
- // connect(pWnd, &ShowTemperatureWnd::SendAddTemperatureListSingals, this,
- // &ShowTemperaturePage::GetAddTemperatureListSlots);
- //
- // connect(pWnd, &ShowTemperatureWnd::SendModifyTemperatureListSingals, this,
- // &ShowTemperaturePage::GetModifyTemperatureListSlots);
- //
- // QListWidgetItem *item = new QListWidgetItem();
- // item->setSizeHint(QSize(370, 393));
- // ui.showlist->addItem(item);
- // ui.showlist->setItemWidget(item, pWnd);
- //}
- //
- //void ShowTemperaturePage::AddListNumberList(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar, int nIndex)
- //{
- // ShowTemperatureListNumberWnd* pWnd = new ShowTemperatureListNumberWnd(this);
- // connect(pWnd, &ShowTemperatureListNumberWnd::SendDelTemperatureListSingals, this,
- // &ShowTemperaturePage::GetDelTemperatureListSlots);
- //
- // connect(pWnd, &ShowTemperatureListNumberWnd::SendAddTemperatureListSingals, this,
- // &ShowTemperaturePage::GetAddTemperatureListSlots);
- //
- // connect(pWnd, &ShowTemperatureListNumberWnd::SendModifyTemperatureListSingals, this,
- // &ShowTemperaturePage::GetModifyTemperatureListSlots);
- //
- // pWnd->SetTemperaturePar(temperaturePar, nIndex);
- // QListWidgetItem* item = new QListWidgetItem();
- // item->setSizeHint(QSize(370, 48));
- // ui.SerialNumberList->addItem(item);
- // ui.SerialNumberList->setItemWidget(item, pWnd);
- //}
- template <typename Y>
- void ShowTemperaturePage::AddListItem(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar,
- int nIndex,
- QListWidget* listWidget,
- const QSize& sizeHint)
- {
- Y* pWnd = new Y(this);
- connect(pWnd, &Y::SendDelTemperatureListSingals, this, &ShowTemperaturePage::GetDelTemperatureListSlots);
- connect(pWnd, &Y::SendAddTemperatureListSingals, this, &ShowTemperaturePage::GetAddTemperatureListSlots);
- connect(pWnd, &Y::SendModifyTemperatureListSingals, this, &ShowTemperaturePage::GetModifyTemperatureListSlots);
- // pWnd->SetTemperaturePar(temperaturePar, nIndex);
- QListWidgetItem* item = new QListWidgetItem();
- item->setSizeHint(sizeHint);
- listWidget->addItem(item);
- listWidget->setItemWidget(item, pWnd);
- }
- void ShowTemperaturePage::UpTemperList(int nID)
- {
- ui.showlist->clear();
- ui.SerialNumberList->clear();
- std::vector<ns_db::TEMPERATURE_LIST_STRUCT> vecTemperatureList = m_pProduct->GetAllTemperatureList();
-
- if (vecTemperatureList.size() <= 0)
- {
- for (int i = 0; i < 11; i++)
- {
- ns_db::TEMPERATURE_LIST_STRUCT _a = {};
- _a.iId = i;
- _a.iId = i + 1;
- vecTemperatureList.push_back(_a);
- }
- }
-
- if (nID == -1)
- {
- m_nInit = true;
- // 不能直接用0, 找不到?
- nID = vecTemperatureList.size() > 0 ? vecTemperatureList[0].iId : 0;
- ui.idListComboBox->clear();
- }
- else
- {
- m_nInit = false;
- }
- int nAdd = 0;
- int nNumb = 0;
- for (const auto a : vecTemperatureList)
- {
- if (nID == a.iId)
- {
- m_vecTemperatureListPage.push_back(a);
- AddListItem<ShowTemperatureWnd>(a, nAdd,
- ui.showlist, QSize(370, 393));
- //AddListItem<ShowTemperatureListNumberWnd>(a, nAdd,
- // ui.SerialNumberList, QSize(370, 48));
- nAdd++;
- }
-
- if (m_nInit)
- {
- ui.idListComboBox->addItem(QString::number(nNumb));
- nNumb++;
- }
- }
- if (ui.showlist->count() > 0)
- {
- ui.showlist->item(0)->setSelected(true);
- }
- m_row = 0;
- AddListItem<ShowTemperatureListNumberWnd>(vecTemperatureList[0], 0,
- ui.SerialNumberList, QSize(370, 48));
- if (m_nInit)
- {
- m_nInit = false;
- }
- }
- void ShowTemperaturePage::DeleteSelectedItem(int nIndex, QListWidget* pListWidget /*= nullptr*/)
- {
- bool isDel = false;
- for (int i = 0; i < pListWidget->count(); ++i)
- {
- QListWidgetItem* item = pListWidget->item(i);
- if (item)
- {
- ShowTemperatureListNumberWnd* customWidget = qobject_cast<ShowTemperatureListNumberWnd*>(pListWidget->itemWidget(item));
- if (customWidget)
- {
- if (customWidget->m_nIndex == nIndex || nIndex == -1)
- {
- QListWidgetItem* itemToRemove = pListWidget->takeItem(i);
- if (customWidget)
- {
- delete customWidget;
- customWidget = nullptr;
- }
- if (itemToRemove)
- {
- delete itemToRemove;
- itemToRemove = nullptr;
- }
- isDel = true;
- break;
- }
- }
- else
- {
- if (item)
- {
- QListWidgetItem* itemToRemove = pListWidget->takeItem(i);
- delete itemToRemove;
- itemToRemove = nullptr;
- isDel = true;
- }
- }
- }
- }
- if (isDel)
- {
- //没写好,
- /* std::rotate(m_vecTemperatureListPage.begin() + nIndex,
- m_vecTemperatureListPage.begin() + nIndex + 1, m_vecTemperatureListPage.end());
- m_vecTemperatureListPage.pop_back();*/
- }
-
-
- // 如果不行用后面的逻辑
- /*if (pListWidget->count() >= nIndex)
- {
- QListWidgetItem* selectedItem = pListWidget->item(nIndex);
- if (selectedItem)
- {
- int row = pListWidget->row(selectedItem);
- QWidget* customWidget = pListWidget->itemWidget(selectedItem);
- QListWidgetItem* itemToRemove = pListWidget->takeItem(row);
- if (customWidget)
- {
- delete customWidget;
- customWidget = nullptr;
- }
- if (itemToRemove)
- {
- delete itemToRemove;
- itemToRemove = nullptr;
- }
- }
- }*/
- }
- void ShowTemperaturePage::GetDelTemperatureListSlots(int iId, int nIndex)
- {
- m_isDel = true;
- //if (ui.SerialNumberList->count() == 1)
- //{
- // // 至少保留一个吧
- //}
- //else
- //{
- // DeleteSelectedItem(nIndex, ui.SerialNumberList);
- //}
- DeleteSelectedItem(nIndex, ui.SerialNumberList);
- if (nIndex == m_row)
- {
- if (ui.showlist->count() > 0)
- {
- DeleteSelectedItem(-1, ui.showlist);
- }
- }
-
- m_pProduct->DeleteTemperatureList(nIndex);
- m_isDel = false;
- }
- void ShowTemperaturePage::GetAddTemperatureListSlots(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar)
- {
- m_pProduct->AddTemperatureList(temperaturePar);
- }
- void ShowTemperaturePage::GetModifyTemperatureListSlots(const ns_db::TEMPERATURE_LIST_STRUCT& temperaturePar)
- {
- m_pProduct->ModifyTemperatureList(temperaturePar.iId, temperaturePar);
- }
- void ShowTemperaturePage::on_idListComboBox_currentIndexChanged(int index)
- {
- if (!m_nInit) //初始化,重复切换
- {
- UpTemperList(index);
- }
- }
- QVector<int> ShowTemperaturePage::findMissingNumbers(QListWidget* listWidget, int expectedMax)
- {
- QSet<int> existingNumbers;
- // 步骤 1: 获取 QListWidget 中所有项的数字值
- for (int i = 0; i < listWidget->count(); ++i)
- {
- QListWidgetItem* item = listWidget->item(i);
- ShowTemperatureListNumberWnd* customWidget = qobject_cast<ShowTemperatureListNumberWnd*>(listWidget->itemWidget(item));
- existingNumbers.insert(customWidget->m_nIndex);
- }
- QVector<int> missingNumbers;
- for (int i = 1; i <= expectedMax; ++i)
- {
- if (!existingNumbers.contains(i))
- {
- missingNumbers.append(i);
- }
- }
- return missingNumbers;
- }
- void ShowTemperaturePage::on_addBut_clicked()
- {
- if (m_pProduct)
- {
- //int nAdd = ui.SerialNumberList->count();
- QVector<int> index = findMissingNumbers(ui.SerialNumberList, 80);
- if (m_vecTemperatureListPage.size() > 0)
- {
- ShowTemperatureListNumberWnd* pW = qobject_cast<ShowTemperatureListNumberWnd*>(ui.SerialNumberList->itemWidget(ui.showlist->item(0)));
-
- ns_db::TEMPERATURE_LIST_STRUCT temperaturePar = m_vecTemperatureListPage[0];
- temperaturePar.iSerialNumber += 1;
- m_vecTemperatureListPage.push_back(temperaturePar);
- AddListItem<ShowTemperatureListNumberWnd>(temperaturePar, index[0],
- ui.SerialNumberList, QSize(370, 48));
- }
- else
- {
- int nAdd = 0;
- if (index.size() > 0)
- {
- nAdd = index[0];
- }
- ns_db::TEMPERATURE_LIST_STRUCT temperaturePar = {};
- //temperaturePar.iId = 1;
- temperaturePar.iSerialNumber += 1;
- m_vecTemperatureListPage.push_back(temperaturePar);
- //添加一个空白
- AddListItem<ShowTemperatureListNumberWnd>(temperaturePar, nAdd,
- ui.SerialNumberList, QSize(370, 48));
- }
- }
- }
- void ShowTemperaturePage::on_addValBut_clicked()
- {
- if (m_pProduct)
- {
- int nAdd = ui.showlist->count();
- if (nAdd > 0)
- {
- ShowTemperatureWnd* pW = qobject_cast<ShowTemperatureWnd*>(ui.showlist->itemWidget(ui.showlist->item(0)));
- AddListItem<ShowTemperatureWnd>(pW->GetVal(), nAdd++,
- ui.showlist, QSize(370, 393));
- }
- }
- }
|