#include #include #include #include #include "bayMeasureDlg.h" #include "ui_bayMeasureDlg.h" #include "baseProperty.h" #include "basePropertyManager.h" #include "measureSettingDlg.h" #include "graphicsDataModel/fixedPortsModel.h" #include "dataBase.h" BayMeasureDlg::BayMeasureDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::bayMeasureDlg) ,_measureDlg(nullptr) ,_bayProperty(nullptr) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); initial(); } BayMeasureDlg::~BayMeasureDlg() { delete ui; } void BayMeasureDlg::initial() { setUi(); connect(ui->btn_add,&QPushButton::clicked,this,&BayMeasureDlg::onAddClicked); connect(ui->tableWidget_local, &QTableWidget::customContextMenuRequested, this, &BayMeasureDlg::onIndexRbtnClicked); connect(ui->btn_ok,&QPushButton::clicked,this,&BayMeasureDlg::onOkClicked); connect(ui->btn_cancel,&QPushButton::clicked,this,&BayMeasureDlg::onCancelClicked); } void BayMeasureDlg::getPropertyValue(BayProperty* pBay) { pBay->setMeasurement(_mapMeasure); } void BayMeasureDlg::setPropertyValue(BayProperty* pBay) { _mapMeasure.clear(); ui->tableWidget_other->setRowCount(0); ui->tableWidget_local->setRowCount(0); //清空列表 ui->le_zhbh->clear(); ui->le_jk->clear(); ui->le_dtgz->clear(); ui->le_gzlb->clear(); ui->le_ztjc->clear(); ui->le_qt->clear(); if(pBay) { QList lstType = DataBase::GetInstance()->getMeasureAttributeTypes(); _validType = lstType; //间隔处理 _bayProperty = pBay; auto map = pBay->getMeasurement(); for(auto& info:map){ addMeasure(info); } if(_bayProperty){ auto lstFrom = _bayProperty->getLstFrom(); auto lstTo = _bayProperty->getLstTo(); auto lstProtect = _bayProperty->getLstProtect(); auto lstFaultRecord = _bayProperty->getLstFaultRecord(); auto lstDynSense = _bayProperty->getLstDynSense(); auto lstStatus = _bayProperty->getLstStatus(); auto lstInstruct = _bayProperty->getLstInstruct(); auto lstEtc = _bayProperty->getLstEtc(); QStringList sLstFrom; for(auto& fromId:lstFrom){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(fromId); if(pPro){ sLstFrom.append(pPro->tag()); } } QStringList sLstTo; for(auto& toId:lstTo){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(toId); if(pPro){ sLstTo.append(pPro->tag()); } } QStringList sLstProtect; for(auto& protectId:lstProtect){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(protectId); if(pPro){ sLstProtect.append(pPro->tag()); } } QStringList sLstFaultRecord; for(auto& faultRecordId:lstFaultRecord){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(faultRecordId); if(pPro){ sLstFaultRecord.append(pPro->tag()); } } QStringList sLstDynSense; for(auto& dynSenseId:lstDynSense){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(dynSenseId); if(pPro){ sLstDynSense.append(pPro->tag()); } } QStringList sLstStatus; for(auto& statusId:lstStatus){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(statusId); if(pPro){ sLstStatus.append(pPro->tag()); } } QStringList sLstInstruct; for(auto& instructId:lstInstruct){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(instructId); if(pPro){ sLstInstruct.append(pPro->tag()); } } QStringList sLstEtc; for(auto& etcId:lstEtc){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(etcId); if(pPro){ sLstEtc.append(pPro->tag()); } } QList lstOther; QList lstCompo = _bayProperty->getLstComponent(); for(auto& compoId:lstCompo){ BaseProperty* pPro = BasePropertyManager::instance().findEntityData(compoId); if(pPro){ lstOther.append(pPro); } } QStringList lstOtherMeasure; for(auto& compo:lstOther){ auto map = compo->getMeasurement(); for(auto& measure:map){ lstOtherMeasure.append(compo->tag()+"-"+measure.tag); } } ui->le_zhbh->setText(sLstProtect.join("、")); ui->le_jk->setText(sLstInstruct.join("、")); ui->le_dtgz->setText(sLstDynSense.join("、")); ui->le_gzlb->setText(sLstFaultRecord.join("、")); ui->le_ztjc->setText(sLstStatus.join("、")); ui->le_qt->setText(sLstEtc.join("、")); ui->le_bayName->setText(_bayProperty->name()); addOtherMeasure(lstOtherMeasure); } } } void BayMeasureDlg::setUi() { QStringList headerText; headerText<<"TAG"<<"名称"<<"设备"<<"端子"<<"类型"<<"SIZE"<<"事件"; ui->tableWidget_local->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableWidget_local->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableWidget_local->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget_local->setColumnCount(headerText.count()); ui->tableWidget_local->setHorizontalHeaderLabels(headerText); ui->tableWidget_local->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableWidget_local->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->tableWidget_local->setStyleSheet( "QTableWidget::item {" " padding: 5px;" // 可选:增加内边距 " white-space: pre-wrap;" // 关键:保留空白符并允许自动换行 "}" ); headerText.clear(); headerText<<"TAG"; ui->tableWidget_other->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableWidget_other->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableWidget_other->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget_other->setColumnCount(headerText.count()); ui->tableWidget_other->setHorizontalHeaderLabels(headerText); ui->tableWidget_other->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableWidget_other->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->tableWidget_other->setStyleSheet( "QTableWidget::item {" " padding: 5px;" // 可选:增加内边距 " white-space: pre-wrap;" // 关键:保留空白符并允许自动换行 "}" ); } void BayMeasureDlg::addMeasure(MeasurementInfo info,int mode) { if(mode == 0){ //新建 if(_mapMeasure.contains(info.name)) return; int row = ui->tableWidget_local->rowCount(); ui->tableWidget_local->insertRow(row); QTableWidgetItem* tagItem = new QTableWidgetItem(info.tag); ui->tableWidget_local->setItem(row, 0, tagItem); QTableWidgetItem* nameItem = new QTableWidgetItem(info.name); ui->tableWidget_local->setItem(row, 1, nameItem); QTableWidgetItem* deviceItem = new QTableWidgetItem(info.sDevice); ui->tableWidget_local->setItem(row, 2, deviceItem); QTableWidgetItem* channelItem = new QTableWidgetItem(info.sChannel); ui->tableWidget_local->setItem(row, 3, channelItem); QString sType; if(info.type == 0){ sType = "遥测"; } else if(info.type == 1){ sType = "遥信"; } else if(info.type == 2){ sType = "遥控"; } else if(info.type == 3){ sType = "遥调"; } else if(info.type == 4){ sType = "整定值"; } QTableWidgetItem* typeItem = new QTableWidgetItem(sType); ui->tableWidget_local->setItem(row, 4, typeItem); QTableWidgetItem* sizeItem = new QTableWidgetItem(QString::number(info.size)); ui->tableWidget_local->setItem(row, 5, sizeItem); QTableWidgetItem* enableItem = new QTableWidgetItem(info.bEnable?"启用":"关闭"); ui->tableWidget_local->setItem(row, 6, enableItem); if(_bayProperty){ QUuid bayId = _bayProperty->uuid(); QUuid itemId = QUuid("11111111-1111-1111-1111-111111111111"); info.bayUuid = bayId; info.componentUuid = itemId; _mapMeasure.insert(info.name,info); } } else if(mode == 1){ //修改 QAbstractItemModel* model = ui->tableWidget_local->model(); int rowCount = model->rowCount(); QModelIndex index; for (int row = 0; row < rowCount; ++row) { QModelIndex col1Index = model->index(row, 1); QVariant data = model->data(col1Index, Qt::DisplayRole); if (data.toString() == info.name) { // 返回本行第0列的QModelIndex index = model->index(row, 1); } } QString sName = index.data().toString(); if(_mapMeasure.contains(sName)){ auto itemDevice = ui->tableWidget_local->item(index.row(),2); if(itemDevice){ itemDevice->setText(info.sDevice); } auto itemChannel = ui->tableWidget_local->item(index.row(),3); if(itemChannel){ itemChannel->setText(info.sChannel); } auto itemType = ui->tableWidget_local->item(index.row(),4); if(itemType){ QString sType; if(info.type == 0){ sType = "遥测"; } else if(info.type == 1){ sType = "遥信"; } else if(info.type == 2){ sType = "遥控"; } else if(info.type == 3){ sType = "遥调"; } else if(info.type == 4){ sType = "整定值"; } itemType->setText(sType); } auto itemSize = ui->tableWidget_local->item(index.row(),5); if(itemSize){ itemSize->setText(QString::number(info.size)); } auto itemEnable = ui->tableWidget_local->item(index.row(),6); if(itemEnable){ itemEnable->setText(info.bEnable?"启用":"关闭"); } if(_bayProperty){ QUuid bayId = _bayProperty->uuid(); info.bayUuid = bayId; _mapMeasure[info.name] = info; } } } } void BayMeasureDlg::addOtherMeasure(QStringList lst) { for(auto& str:lst){ int row = ui->tableWidget_other->rowCount(); ui->tableWidget_other->insertRow(row); QTableWidgetItem* tagItem = new QTableWidgetItem(str); ui->tableWidget_local->setItem(row, 0, tagItem); } } void BayMeasureDlg::showDlg(BayProperty* pBay) { show(); setPropertyValue(pBay); } void BayMeasureDlg::onAddClicked() { if(_measureDlg == nullptr){ _measureDlg = new MeasureSettingDlg(this); _measureDlg->setParentType(1); _measureDlg->setBayMeasure(this); } int curType = 0; //当前对象类型 _measureDlg->showDlg(curType,propertyStateInfo()); } void BayMeasureDlg::onDeleteClicked() { // 获取当前选中的索引 QModelIndexList selectedIndexes = ui->tableWidget_local->selectionModel()->selectedRows(); if (selectedIndexes.isEmpty()) { return; // 没有选中任何行 } // 获取当前选中的第一项索引 QModelIndex index = selectedIndexes.first(); if (!index.isValid()) { return; } QModelIndex indexName = index.sibling(index.row(),1); QString sName = indexName.data().toString(); if(_mapMeasure.contains(sName)){ MeasurementInfo info = _mapMeasure.take(sName); } int currentRow = ui->tableWidget_local->currentRow(); if (currentRow == -1) { return; // 没有选中行 } ui->tableWidget_local->removeRow(currentRow); } void BayMeasureDlg::onModifyClicked() { // 获取当前选中的索引 QModelIndexList selectedIndexes = ui->tableWidget_local->selectionModel()->selectedRows(); if (selectedIndexes.isEmpty()) { return; // 没有选中任何行 } // 获取当前选中的第一项索引 QModelIndex index = selectedIndexes.first(); if (!index.isValid()) { return; } QModelIndex indexName = index.sibling(index.row(),1); QString sName = indexName.data().toString(); if(_mapMeasure.contains(sName)){ auto info = _mapMeasure.value(sName); if(_measureDlg == nullptr){ _measureDlg = new MeasureSettingDlg(this); _measureDlg->setParentType(1); _measureDlg->setBayMeasure(this); } _measureDlg->showDlg(info,propertyStateInfo()); } } void BayMeasureDlg::onIndexRbtnClicked(const QPoint &pos) { // 获取当前点击的位置对应的索引 QModelIndex index = ui->tableWidget_local->indexAt(pos); if (!index.isValid()) { return; // 如果点击的是空白区域,直接返回 } QMenu menu; QAction *modifyAction = new QAction("修改量测", this); QAction *deleteAction = new QAction("移除量测", this); menu.addAction(modifyAction); menu.addAction(deleteAction); // 连接删除菜单项的触发信号与槽函数 connect(modifyAction, &QAction::triggered, this, &BayMeasureDlg::onModifyClicked); connect(deleteAction, &QAction::triggered, this, &BayMeasureDlg::onDeleteClicked); // 在点击位置显示菜单 menu.exec(ui->tableWidget_local->mapToGlobal(pos)); } void BayMeasureDlg::onOkClicked() { getPropertyValue(_bayProperty); hide(); } void BayMeasureDlg::onCancelClicked() { hide(); }