From d9a74285e98a2aaf5619ca0221a6bc7e1805d2e5 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Mon, 7 Jul 2025 19:01:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=92=8C=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B9=8B?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE=E9=80=BB=E8=BE=91=E7=BA=A6=E6=9D=9F?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E5=90=8C=E6=AD=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dataPanel/dpConfigurationDialog.cpp | 137 ++++++++++++++++++---------- dataPanel/dpConfigurationDialog.h | 1 + include/global.h | 2 +- source/global.cpp | 26 +++--- 4 files changed, 105 insertions(+), 61 deletions(-) diff --git a/dataPanel/dpConfigurationDialog.cpp b/dataPanel/dpConfigurationDialog.cpp index 3b20b72..8ba59ca 100644 --- a/dataPanel/dpConfigurationDialog.cpp +++ b/dataPanel/dpConfigurationDialog.cpp @@ -152,41 +152,64 @@ void dpConfigurationDialog::createDataSourceList() { //demo先临时写死,后续改为接口动态创建 QStandardItem* rootItem = m_pModel_dataSource->invisibleRootItem(); - QStandardItem* stationItem = new QStandardItem("测试站"); - stationItem->setEditable(false); - stationItem->setData("station", Qt::UserRole + itemRole_tag); - rootItem->appendRow(stationItem); - QStandardItem* componentItem = new QStandardItem("异步电机"); - componentItem->setEditable(false); - componentItem->setData("component", Qt::UserRole + itemRole_tag); - stationItem->appendRow(componentItem); - QStandardItem* currentItem = new QStandardItem("电流"); - currentItem->setEditable(false); - currentItem->setData("current", Qt::UserRole + itemRole_tag); - currentItem->setData(0, Qt::UserRole + itemRole_stationID); - currentItem->setData(0, Qt::UserRole + itemRole_componentID); - currentItem->setData(0, Qt::UserRole + itemRole_pointID); - currentItem->setData(RealTimeDataType::current, Qt::UserRole + itemRole_dataType); - componentItem->appendRow(currentItem); - QStandardItem* voltageItem = new QStandardItem("电压"); - voltageItem->setEditable(false); - voltageItem->setData("voltage", Qt::UserRole + itemRole_tag); - voltageItem->setData(0, Qt::UserRole + itemRole_stationID); - voltageItem->setData(0, Qt::UserRole + itemRole_componentID); - voltageItem->setData(1, Qt::UserRole + itemRole_pointID); - voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType); - componentItem->appendRow(voltageItem); - QStandardItem* powerItem = new QStandardItem("功率"); - powerItem->setEditable(false); - powerItem->setData("power", Qt::UserRole + itemRole_tag); - powerItem->setData(0, Qt::UserRole + itemRole_stationID); - powerItem->setData(0, Qt::UserRole + itemRole_componentID); - powerItem->setData(2, Qt::UserRole + itemRole_pointID); - powerItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType); - componentItem->appendRow(powerItem); + for(int i = 0; i < 3; i++) + { + QString strStation = QString("测试站-") + QString::number(i + 1); + QStandardItem* stationItem = new QStandardItem(strStation); + stationItem->setEditable(false); + stationItem->setData("station", Qt::UserRole + itemRole_tag); + rootItem->appendRow(stationItem); + QStandardItem* componentItem = new QStandardItem("异步电机"); + componentItem->setEditable(false); + componentItem->setData("component", Qt::UserRole + itemRole_tag); + stationItem->appendRow(componentItem); + QStandardItem* voltageItem = new QStandardItem("电压"); + voltageItem->setEditable(false); + voltageItem->setData("point", Qt::UserRole + itemRole_tag); + voltageItem->setData(i, Qt::UserRole + itemRole_stationID); + voltageItem->setData(0, Qt::UserRole + itemRole_componentID); + voltageItem->setData(0, Qt::UserRole + itemRole_pointID); + voltageItem->setData(RealTimeDataType::voltage, Qt::UserRole + itemRole_dataType); + componentItem->appendRow(voltageItem); + QStandardItem* currentItem = new QStandardItem("电流"); + currentItem->setEditable(false); + currentItem->setData("point", Qt::UserRole + itemRole_tag); + currentItem->setData(i, Qt::UserRole + itemRole_stationID); + currentItem->setData(0, Qt::UserRole + itemRole_componentID); + currentItem->setData(1, Qt::UserRole + itemRole_pointID); + currentItem->setData(RealTimeDataType::current, Qt::UserRole + itemRole_dataType); + componentItem->appendRow(currentItem); + QStandardItem* powerItem = new QStandardItem("功率"); + powerItem->setEditable(false); + powerItem->setData("point", Qt::UserRole + itemRole_tag); + powerItem->setData(i, Qt::UserRole + itemRole_stationID); + powerItem->setData(0, Qt::UserRole + itemRole_componentID); + powerItem->setData(2, Qt::UserRole + itemRole_pointID); + powerItem->setData(RealTimeDataType::power, Qt::UserRole + itemRole_dataType); + componentItem->appendRow(powerItem); + } + ui->dataSourceList->expandAll(); } +void dpConfigurationDialog::removeDataSelected(int deleteRow) +{ + QList items = m_pModel_dataSelected->takeRow(deleteRow); + for(QStandardItem* item: items) + delete item; + + //更新颜色-从当前删除项往后的所有项 + for(int row = deleteRow; row < m_pModel_dataSelected->rowCount(); row++) + { + QStandardItem* item = m_pModel_dataSelected->item(row, 0); + if(item) + { + QColor color = g_globalColor.value(item->row() % g_globalColor.size()); + item->setData(color, Qt::DecorationRole); + } + } +} + void dpConfigurationDialog::setPanel(DataPanel* pPanel) { m_pDataPanel = pPanel; @@ -303,6 +326,8 @@ void dpConfigurationDialog::onItemClicked_typeSource(const QModelIndex& index) QStandardItem* newItem = new QStandardItem(item->text()); newItem->setEditable(false); + RealTimeDataType dataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt(); + newItem->setData(dataType, Qt::UserRole + itemRole_dataType); m_pModel_typeSelected->appendRow(newItem); ui->typeSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); @@ -323,6 +348,18 @@ void dpConfigurationDialog::onBtnClicked_remove_type() if(nCurrentRow == -1) return; + //同步删除dataSource中已选择的该类型数据 + RealTimeDataType itemDataType = (RealTimeDataType)m_pModel_typeSelected->data(selectionModel->currentIndex(), Qt::UserRole + itemRole_dataType).toInt(); + for(int i = m_pModel_dataSelected->rowCount() - 1; i >= 0; i--) //倒序查找,因为执行removeDataSelected时,内部会从删除项往后更新颜色,倒序可以减少循环次数 + { + RealTimeDataType dataType = (RealTimeDataType)m_pModel_dataSelected->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt(); + if(itemDataType == dataType) + { + removeDataSelected(i); + //i++; + } + } + QList items = m_pModel_typeSelected->takeRow(nCurrentRow); for(QStandardItem* item: items) delete item; @@ -347,6 +384,24 @@ void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index) if(strTag != "point") return; + //只能对已选择的数据类型进行选择 + + bool bCanbeSelect = false; + RealTimeDataType itemDataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt(); + //qDebug() << "itemDataType" << itemDataType; + for(int i = 0; i< m_pModel_typeSelected->rowCount(); i++) + { + RealTimeDataType dataType = (RealTimeDataType)m_pModel_typeSelected->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt(); + //qDebug() << "dataType" << dataType; + if(itemDataType == dataType) + { + bCanbeSelect = true; + break; + } + } + if(!bCanbeSelect) + return; + QString strText = ""; QStandardItem* compontItme = item->parent(); if(compontItme && compontItme->data(Qt::UserRole + itemRole_tag).toString() == "component") @@ -380,8 +435,9 @@ void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index) newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID); newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID); newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID); + newItem->setData(item->data(Qt::UserRole + itemRole_dataType), Qt::UserRole + itemRole_dataType); m_pModel_dataSelected->appendRow(newItem); - QColor color = g_globlaColor.value(newItem->row() % g_globlaColor.size()); + QColor color = g_globalColor.value(newItem->row() % g_globalColor.size()); newItem->setData(color, Qt::DecorationRole); ui->dataSelectedList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); } @@ -393,19 +449,6 @@ void dpConfigurationDialog::onBtnClicked_remove_source() if(selectionModel && m_pModel_dataSelected) { int nCurrentRow = selectionModel->currentIndex().row(); - QList items = m_pModel_dataSelected->takeRow(nCurrentRow); - for(QStandardItem* item: items) - delete item; - - //更新颜色-从当前删除项往后的所有项 - for(int row = nCurrentRow; row < m_pModel_dataSelected->rowCount(); row++) - { - QStandardItem* item = m_pModel_dataSelected->item(row, 0); - if(item) - { - QColor color = g_globlaColor.value(item->row() % g_globlaColor.size()); - item->setData(color, Qt::DecorationRole); - } - } + removeDataSelected(nCurrentRow); } } diff --git a/dataPanel/dpConfigurationDialog.h b/dataPanel/dpConfigurationDialog.h index 14b2af7..cfa45a3 100644 --- a/dataPanel/dpConfigurationDialog.h +++ b/dataPanel/dpConfigurationDialog.h @@ -43,6 +43,7 @@ private: void initialize(); void copyModelData(QStandardItemModel*, QStandardItemModel*); void createDataSourceList(); + void removeDataSelected(int); Ui::dpConfigurationDialog* ui; QPushButton* m_curActiveTab; diff --git a/include/global.h b/include/global.h index cfe248d..983cdf0 100644 --- a/include/global.h +++ b/include/global.h @@ -48,7 +48,7 @@ enum TimeUnit }; extern MessageDialogBtn g_msgDlgBtn; -extern QHash g_globlaColor; +extern QHash g_globalColor; extern QHash g_timeUnit; void initializeGlobalVariable(); diff --git a/source/global.cpp b/source/global.cpp index 51897c8..fdf012b 100644 --- a/source/global.cpp +++ b/source/global.cpp @@ -2,24 +2,24 @@ MessageDialogBtn g_msgDlgBtn = btn_Null; -QHash g_globlaColor; +QHash g_globalColor; QHash g_timeUnit; void initializeGlobalVariable() { //颜色 - g_globlaColor.insert(0, QColor(153, 50, 204)); //深兰花紫 - g_globlaColor.insert(1, QColor(127, 255, 170)); //绿玉\碧绿色 - g_globlaColor.insert(2, QColor(0, 206, 209)); //深绿宝石 - g_globlaColor.insert(3, QColor(46, 139, 87)); //海洋绿 - g_globlaColor.insert(4, QColor(225, 215, 0)); //金色 - g_globlaColor.insert(5, QColor(255, 165, 0)); //橙色 - g_globlaColor.insert(6, QColor(144, 238, 144)); //浅绿色 - g_globlaColor.insert(7, QColor(218, 112, 214)); //兰花的紫色 - g_globlaColor.insert(8, QColor(70, 130, 180)); //钢蓝 - g_globlaColor.insert(9, QColor(218, 165, 32)); //秋麒麟 - g_globlaColor.insert(10, QColor(240, 128, 128)); //淡珊瑚色 - g_globlaColor.insert(11, QColor(70, 130, 180)); //钢蓝 + g_globalColor.insert(0, QColor(153, 50, 204)); //深兰花紫 + g_globalColor.insert(1, QColor(127, 255, 170)); //绿玉\碧绿色 + g_globalColor.insert(2, QColor(0, 206, 209)); //深绿宝石 + g_globalColor.insert(3, QColor(46, 139, 87)); //海洋绿 + g_globalColor.insert(4, QColor(225, 215, 0)); //金色 + g_globalColor.insert(5, QColor(255, 165, 0)); //橙色 + g_globalColor.insert(6, QColor(144, 238, 144)); //浅绿色 + g_globalColor.insert(7, QColor(218, 112, 214)); //兰花的紫色 + g_globalColor.insert(8, QColor(70, 130, 180)); //钢蓝 + g_globalColor.insert(9, QColor(218, 165, 32)); //秋麒麟 + g_globalColor.insert(10, QColor(240, 128, 128)); //淡珊瑚色 + g_globalColor.insert(11, QColor(70, 130, 180)); //钢蓝 //时间单位 g_timeUnit.insert(TU_Year, QString::fromWCharArray(L"365d")); g_timeUnit.insert(TU_Month, QString::fromWCharArray(L"30d"));