From 8c1b772f50ccd02ca9e5c98894eb02685741e579 Mon Sep 17 00:00:00 2001 From: baiYue Date: Tue, 9 Jun 2026 15:46:04 +0800 Subject: [PATCH] fix project model layout --- common/include/baseProperty.h | 5 +- common/source/baseProperty.cpp | 4 +- diagramCavas/include/diagramCavas.h | 1 + .../graphicsDataModel/fixedPortsModel.h | 6 +- diagramCavas/source/diagramCavas.cpp | 3 + .../graphicsDataModel/diagramEditorModel.cpp | 8 +- .../graphicsDataModel/fixedPortsModel.cpp | 119 +++++++++++++++--- .../graphicsItem/electricConnectLineItem.cpp | 6 +- .../source/graphicsItem/graphicsBaseItem.cpp | 6 + diagramCavas/ui/projectDiagramNameInput.ui | 65 ---------- diagramUtils/include/dataBase.h | 2 +- diagramUtils/include/dataManager.h | 2 +- diagramUtils/source/dataBase.cpp | 19 +-- diagramUtils/source/dataManager.cpp | 13 +- include/diagramView.h | 1 + source/diagramView.cpp | 12 ++ source/mainwindow.cpp | 2 +- 17 files changed, 161 insertions(+), 113 deletions(-) diff --git a/common/include/baseProperty.h b/common/include/baseProperty.h index 695be24..bf8e619 100644 --- a/common/include/baseProperty.h +++ b/common/include/baseProperty.h @@ -191,6 +191,8 @@ public: QString zone() const {return sZone;} void setStation(const QString& s) {sStation = s;} QString station() const {return sStation;} + void setStationId(int id) {nStationId = id;} + int stationId() const{return nStationId;} void setSourceItemId(const QString& s) {sSourceItemId = s;} QString getSourceItemId() {return sSourceItemId;} void setMeasurement(QMap map) {mMeasurement = map;} @@ -201,6 +203,7 @@ protected: QString sGrid; QString sZone; QString sStation; + int nStationId = 0; bool bInService; int nState; int nStatus; @@ -219,6 +222,6 @@ public: VariableProperty(QObject* parent = nullptr); ~VariableProperty(); - ModelDataInfo& getPropertyValue() const; + ModelDataInfo& getPropertyValue(bool useCatch = false) const; }; #endif // DATABASE_H diff --git a/common/source/baseProperty.cpp b/common/source/baseProperty.cpp index dac202b..dabcee6 100644 --- a/common/source/baseProperty.cpp +++ b/common/source/baseProperty.cpp @@ -90,7 +90,7 @@ VariableProperty::~VariableProperty() } -ModelDataInfo& VariableProperty::getPropertyValue() const +ModelDataInfo& VariableProperty::getPropertyValue(bool useCatch) const { - return DataManager::instance().modelData()[sModelName]; + return DataManager::instance().modelData(useCatch)[sModelName]; } diff --git a/diagramCavas/include/diagramCavas.h b/diagramCavas/include/diagramCavas.h index 54e18c5..e1da5fb 100644 --- a/diagramCavas/include/diagramCavas.h +++ b/diagramCavas/include/diagramCavas.h @@ -59,6 +59,7 @@ signals: void updateMonitorTopology(QList); void pannelSelected(QString sPanel,int nType); //界面选择信号,名称,类型(0:editor) void clearTopology(); + void projectSaved(const QString,int); public slots: void onSignal_addDrawingPanel(PowerEntity* p,DiagramMode = DM_edit,QString parent = QString()); //parent:派生运行时的page void onSignal_addGraphicsItem(ModelStateInfo&); diff --git a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h index 9b6e945..a807619 100644 --- a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h +++ b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h @@ -90,7 +90,7 @@ public: void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框 void generateProjectModel(const QString&,QList,QList); //由基模生成工程模 - void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*,QString sGrid = "",QString sZone = "",QString sStation = ""); //从基模item生成工程模item + void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*,QString sGrid = "",QString sZone = "",QString sStation = "",int stationId = 0); //从基模item生成工程模item void onWizardFinished(QMap mapItem,QList mapBay); //editor结束生成基模 /*************************间隔*****************************/ void addBayItem(QUuid,ModelFunctionType = ModelFunctionType::ProjectModel); @@ -142,6 +142,7 @@ Q_SIGNALS: void dataUpdated(); //数据更新通知 void updateTopologyItems(QList,bool,bool); //更新当前拓扑列表 <连接关系,是否刷新,显示全部层级> void notifyUpdateMonitorTopology(QList); //使用列表中的item id更新总拓扑 + void projectSaved(QString,int id); //工程模保存完成信号 public: void setPageName(QString s) {_pageName = s;} //设置表名称 QString pageName() const {return _pageName;} @@ -149,6 +150,7 @@ public: void startHttpRequest(); //开始请求数据(运行时) void setCavas(QPointer p) {_cavas = p;} //设置所属顶层容器 DiagramCavas* getCavas(); + void refreshConnection(); void updateTopologyLst(); //更新拓扑列表 QMap getProjectItems(){return _nodeItem;} @@ -166,7 +168,7 @@ public Q_SLOTS: private: void addPortsToItem_json(PortState,QJsonArray,GraphicsBaseItem*); //将json格式的port添加到item void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置,将projectName更新到item - QString removeSuffix(const QString& str); //移除最后一个下划线后的内容 (处理各种tag后缀) + QString removeSuffix(const QString& str,QChar symbol = '_'); //移除最后一个符号后的内容 (处理各种tag后缀,默认'_') ModelProperty* getItemByUid(QList,QUuid); //返回uid对应的data void updateMonitor(QMap>); //使用当前数据更新运行时 void assignMeasureSymmetry(QMap& measurementMap); //设置量测中互为double的name diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index 0c28077..8a25d4c 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -203,6 +203,9 @@ void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode, connect(pModel,&FixedPortsModel::updateTopologyItems,this,&DiagramCavas::onSignal_updateTopology); connect(pModel,&FixedPortsModel::itemSelected,this,&DiagramCavas::onSignal_selectedItems); connect(pModel,&FixedPortsModel::notifyUpdateMonitorTopology,this,&DiagramCavas::onSignal_updateMonitorTopology); + connect(pModel,&FixedPortsModel::projectSaved,this,[&](const QString sPage,int id){ + emit projectSaved(sPage,id); + }); connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); } else if(mode == DM_run){ diff --git a/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp b/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp index fdc800f..a0dbd04 100644 --- a/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp +++ b/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp @@ -930,7 +930,7 @@ void DiagramEditorModel::refreshConnection() if(pTopoFrom && pTopoTo){ QPointF p1 = pFrom->pos(); QPointF p2 = pTo->pos(); - pTopoFrom->setRelativePosition(p1); + pTopoFrom->setRelativePosition(p1); //重绘连接位置时保存 pTopoTo->setRelativePosition(p2); } } @@ -939,12 +939,6 @@ void DiagramEditorModel::refreshConnection() } } } - if(_pCurPreviewScene){ - for (QGraphicsItem *item : _pCurPreviewScene->items()) { - item->setSelected(true); - } - _pCurPreviewScene->clearSelection(); - } } void DiagramEditorModel::applyLayoutResult(const LayoutResult& result) { diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index bf11ed2..d222cf3 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -179,7 +179,7 @@ QString FixedPortsModel::addNodeItem(QUuid id,QPointF pos,double width,double he QString sMeta = pro->metaModelName(); QString sProModel = pro->modelName(); - ModelDataInfo mapValue = DataManager::instance().modelData()[sProModel]; + ModelDataInfo mapValue = DataManager::instance().modelData(true)[sProModel]; PropertyValueInfo valueInfo; //属性组设置的数据 (ct,pt二次绕组) if(mapValue.groupInfo.contains("base_extend")) { @@ -735,8 +735,8 @@ void FixedPortsModel::loadNodeDataFromDataBase() QList lst= DataBase::GetInstance()->getAllComponents(); for(auto &info:lst) { - QString preTag = removeSuffix(info.tag); - QString prePath = removeSuffix(info.nspath); + QString preTag = removeSuffix(info.tag,'-'); + QString prePath = removeSuffix(info.nspath,'-'); BaseProperty* pData = addNodeData(info.uuid,info.type,info.name,info.modelName); pData->setTag(preTag); pData->setName(info.name); @@ -962,7 +962,7 @@ void FixedPortsModel::saveNode(int nPageId) BayProperty* pBay = dynamic_cast(pro); if(pBay){ bool val = DataBase::GetInstance()->ifBayExist(pBay->uuid()); - QString tempTag = pBay->tag()+"_"+_pageName; //tag后加工程名保持全局唯一 + QString tempTag = pBay->tag()+"-"+_pageName; //tag后加工程名保持全局唯一 if(!val){ QJsonObject objFrom = turnListToJson(pBay->getLstFrom(),"id","ids"); QJsonObject objTo= turnListToJson(pBay->getLstTo(),"id","ids"); @@ -993,6 +993,7 @@ void FixedPortsModel::saveNode(int nPageId) QString sZoneTag; QString sZoneName; QString sStationTag; + int nStationId; QString sStationName; QList lstId = pBay->getLstComponent(); //获取间隔下的所有item,取一个item所属的层级关系 if(!lstId.isEmpty()){ @@ -1017,6 +1018,7 @@ void FixedPortsModel::saveNode(int nPageId) for(auto& stationInfo:lstStation){ if(pItemData->station() == stationInfo.tagname){ sStationTag = stationInfo.tagname; + nStationId = stationInfo.id; sStationName = stationInfo.name; break; } @@ -1026,7 +1028,7 @@ void FixedPortsModel::saveNode(int nPageId) if(!bExist){ if(!bSaveFlag){ - DataBase::GetInstance()->insertComponent(QUuid("11111111-1111-1111-1111-111111111111"),"","","","","","","",sStationTag,-1,false,-1,-1,QJsonObject(),QJsonObject(),QJsonObject(),1); + DataBase::GetInstance()->insertComponent(QUuid("11111111-1111-1111-1111-111111111111"),"","","","","","","",sStationTag,nStationId,-1,false,-1,-1,QJsonObject(),QJsonObject(),QJsonObject(),1); bSaveFlag = true; } } @@ -1184,6 +1186,7 @@ void FixedPortsModel::saveNode(int nPageId) } QMap mapItems = allItems(); + bool updated = false; for(auto& pItem:mapItems) { BaseProperty* pData = dynamic_cast(pItem->getProperty()); @@ -1213,8 +1216,11 @@ void FixedPortsModel::saveNode(int nPageId) VariableProperty* pVariable = dynamic_cast(pData); if(pVariable) { - ModelDataInfo& dataInfo = pVariable->getPropertyValue(); - QString tempTag = pData->tag()+"_"+_pageName; //tag后加工程名使得全局唯一 + bool useCatch = updated?true:false; + ModelDataInfo& dataInfo = pVariable->getPropertyValue(useCatch); + if(updated == false) + updated = true; + QString tempTag = pData->tag()+"-"+_pageName+pData->getBay(); //tag后加工程名使得全局唯一 if(exist) //已存在更新 { DataBase::GetInstance()->updateComponent(pData->uuid(),tempTag,pData->name(),pData->context(),pData->inService(),pData->state(),pData->status()); @@ -1234,8 +1240,8 @@ void FixedPortsModel::saveNode(int nPageId) } else { - QString tempPath = pData->path()+"_"+_pageName; - DataBase::GetInstance()->insertComponent(pData->uuid(),pData->modelName(),tempPath,tempTag,pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->type(),true,pData->state(),pData->status(),pData->connectedBus(),pData->label(),pData->context(),1); + QString tempPath = pData->path()+"-"+_pageName; + DataBase::GetInstance()->insertComponent(pData->uuid(),pData->modelName(),tempPath,tempTag,pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->stationId(),pData->type(),true,pData->state(),pData->status(),pData->connectedBus(),pData->label(),pData->context(),1); for(auto &val:dataInfo.groupInfo) { if(val.groupName == "component") @@ -1691,6 +1697,65 @@ DiagramCavas* FixedPortsModel::getCavas() return nullptr; } +void FixedPortsModel::refreshConnection() +{ + for(auto& item:_nodeItem){ + auto pData = item->getProperty(); + if(pData){ + int nType = pData->type(); + QUuid uid = pData->uuid(); + if(nType == 8){ //是电缆 + auto pLine = dynamic_cast(item); + if(pLine){ + PowerConnection* pCon = TopologyManager::instance().connection(uid.toString(),ModelFunctionType::EditorModel); + if(pCon){ + QString fromTerId = pCon->fromTerminalId(); + QString toTerId = pCon->toTerminalId(); + QString fromId = pCon->fromComponent(); + QString toId = pCon->toComponent(); + + GraphicsProjectModelItem* pFromItem = _nodeItem.value(QUuid(fromId)); + GraphicsProjectModelItem* pToItem = _nodeItem.value(QUuid(toId)); + + auto pFromData = pFromItem->getProperty(); + auto pToData = pToItem->getProperty(); + if(pFromData->type() == 1){ //from是母线 + auto pToPort = pToItem->getPortById(toTerId); + QPointF p = calculateBusPortPos(pFromItem,pToItem,pToPort->scenePos()); + pFromItem->movePort(fromTerId,pFromItem->mapFromScene(p)); + } + else if(pToData->type() == 1){ //to是母线 + auto pFromPort = pFromItem->getPortById(fromTerId); + QPointF p = calculateBusPortPos(pToItem,pFromItem,pFromPort->scenePos()); + pToItem->movePort(toTerId,pToItem->mapFromScene(p)); + } + + auto portsFrom = pFromItem->getPorts(); + auto portsTo = pToItem->getPorts(); + + ItemPort* pFrom = portsFrom.value(fromTerId); + ItemPort* pTo = portsTo.value(toTerId); + if(pFrom && pTo){ //更新连线起点终点位置 + pLine->setStartPoint(pFrom->scenePos()); + pLine->setEndPoint(pTo->scenePos()); + pLine->calculatePath(); + + PowerTerminal* pTopoFrom = TopologyManager::instance().getTerminal(fromTerId,ModelFunctionType::EditorModel); + PowerTerminal* pTopoTo = TopologyManager::instance().getTerminal(toTerId,ModelFunctionType::EditorModel); + if(pTopoFrom && pTopoTo){ + QPointF p1 = pFrom->pos(); + QPointF p2 = pTo->pos(); + pTopoFrom->setRelativePosition(p1); + pTopoTo->setRelativePosition(p2); + } + } + } + } + } + } + } +} + void FixedPortsModel::updateTopologyLst() { QString sG; @@ -1834,9 +1899,9 @@ void FixedPortsModel::autoSetModelName(GraphicsBaseModelItem* pItem) } } -QString FixedPortsModel::removeSuffix(const QString& str) +QString FixedPortsModel::removeSuffix(const QString& str,QChar symbol) { - int lastUnderscore = str.lastIndexOf('_'); + int lastUnderscore = str.lastIndexOf(symbol); if (lastUnderscore == -1) return str; // 没有下划线 return str.left(lastUnderscore); @@ -2149,6 +2214,8 @@ void FixedPortsModel::saveProject() DataBase::GetInstance()->updatePage(sPage,sPage,context); int pageId = DataBase::GetInstance()->getPageIdByName(sPage); pPanel->saveNodes(pageId); + emit projectSaved(sPage,pageId); + QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存完成")); } /*********************baseModel**********************/ @@ -2246,12 +2313,16 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QListsetGrid(sG); pData->setZone(sZ); pData->setStation(sS); - addProjectItemByBaseData(pProPanel,pBaseItem,pData,sG,sZ,sS); + pData->setStationId(nStationId); + addProjectItemByBaseData(pProPanel,pBaseItem,pData,sG,sZ,sS,nStationId); } } } @@ -2386,6 +2458,7 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList mapItem,QList mapBlock) @@ -2723,7 +2796,7 @@ void FixedPortsModel::onWizardFinished(QMap mapIte emit updateTopologyItems(lstItem,false,false); } -void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pItem,BaseProperty* pPro,QString sGrid,QString sZone,QString sStation) +void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pItem,BaseProperty* pPro,QString sGrid,QString sZone,QString sStation,int nStationId) { BaseModelProperty* pBase = dynamic_cast(pItem->getProperty()); if(pBase){ @@ -2737,6 +2810,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pPro->setSubList(pBase->getSubList()); //传递sublist pPro->setBay(sBay); pPro->setVoltageLevel(pBase->getVoltageLevel()); + QMap basePorts = pItem->getPorts(); int nBaseTypeId = BaseTypeManager::getInstance()->getIdByModelType(pBase->metaModelName()); @@ -3035,7 +3109,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { if(pProItem){ PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,pPro->uuid().toString(),pBase->name()); - QList lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点 + /*QList lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点 for(auto& baseTer:lstBase) { QUuid uid = QUuid::createUuid(); @@ -3046,7 +3120,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase proTer->setGenerateBy(baseTer->id()); if(proTer->type() == TerminalType::PowerConnect) { - pProItem->addPort(p_movable,proTer->relativePosition(),proTer->id()); + pProItem->addPort(p_movable,pRelaPos,proTer->id(),T_lineInOut,PortPos(baseTer->getPortLocate()),dPerX,dPerY); ItemPort* pPort = pProItem->getPortById(proTer->id()); pPort->setSourcePortId(baseTer->id()); } @@ -3071,6 +3145,17 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase ItemPort* pPort = pProItem->getPortById(proTer->id()); pPort->setSourcePortId(baseTer->id()); } + }*/ + + for(auto& pBasePort:basePorts){ //不使用拓扑携带的位置数据,由base数据直接派生 + double dPerX = pBasePort->getXPercent(); + double dPerY = pBasePort->getYPercent(); + QPointF pRelaPos = pBasePort->pos(); + PowerTerminal* proTer = TopologyManager::instance().createTerminal(pEntity->id(),TerminalType::PowerConnect,"",pRelaPos,pBasePort->getId(),ModelFunctionType::ProjectModel,dPerX,dPerY); + proTer->setGenerateBy(pBasePort->getId()); + pProItem->addPort(p_movable,pRelaPos,proTer->id(),pBasePort->getType(),pBasePort->portPos(),dPerX,dPerY); + ItemPort* pPort = pProItem->getPortById(proTer->id()); + pPort->setSourcePortId(pBasePort->getId()); } pProItem->setItemId(QUuid(pEntity->id())); @@ -3127,6 +3212,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pData->setGrid(sGrid); pData->setZone(sZone); pData->setStation(sStation); + pData->setStationId(nStationId); addProjectItemByBaseData(pPanel,pFromItem,pData); proFromItemId = id.toString(); } @@ -3139,6 +3225,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pData->setGrid(sGrid); pData->setZone(sZone); pData->setStation(sStation); + pData->setStationId(nStationId); addProjectItemByBaseData(pPanel,pToItem,pData); proToItemId = id.toString(); } diff --git a/diagramCavas/source/graphicsItem/electricConnectLineItem.cpp b/diagramCavas/source/graphicsItem/electricConnectLineItem.cpp index 6374d81..bae50e3 100644 --- a/diagramCavas/source/graphicsItem/electricConnectLineItem.cpp +++ b/diagramCavas/source/graphicsItem/electricConnectLineItem.cpp @@ -417,12 +417,12 @@ bool ElectricConnectLineItem::isSegmentSafe(const QPointF& p1, const QPointF& p2 bool ElectricConnectLineItem::isPathSafe(const QList& path, const QList& components) { - for (int i = 0; i < path.size() - 1; i++) { + /*for (int i = 0; i < path.size() - 1; i++) { if (!isSegmentSafe(path[i], path[i+1], components)) { return false; } - } - return true; + }*/ + return true; //相交判断暂时屏蔽 } // 检查线段是否穿透元件 diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index 9aca7e9..dd26439 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -92,6 +92,12 @@ int GraphicsBaseItem::addPort(PortState typ,QPointF vec,QString id,HandleType hT if(typ == p_movable) { pPort->setType(T_lineInOut); + if(dXPercent || dYPercent) + { + pPort->setPortPos(pos); + pPort->setXPercent(dXPercent); + pPort->setYPercent(dYPercent); + } } else { diff --git a/diagramCavas/ui/projectDiagramNameInput.ui b/diagramCavas/ui/projectDiagramNameInput.ui index 738691a..b0c0782 100644 --- a/diagramCavas/ui/projectDiagramNameInput.ui +++ b/diagramCavas/ui/projectDiagramNameInput.ui @@ -34,71 +34,6 @@ 0 - - - - - 0 - 25 - - - - - 16777215 - 25 - - - - QWidget { - background: #2c5282; - color: white; - border: none; -} - -QWidget QLabel { - color: white; - font-size: 12px; - background: transparent; -} - - - - 0 - - - 0 - - - - - - -1 - - - - - - - 输入组态图名称 - - - - - - - Qt::Orientation::Horizontal - - - - 227 - 20 - - - - - - - diff --git a/diagramUtils/include/dataBase.h b/diagramUtils/include/dataBase.h index 77b1f8c..4c0f5c1 100644 --- a/diagramUtils/include/dataBase.h +++ b/diagramUtils/include/dataBase.h @@ -51,7 +51,7 @@ public: bool deleteTopologic(QUuid fromPin,QUuid toPin); /*********************************************************************************/ bool updateComponent(QUuid uuid,QString tag,QString name,QJsonObject context,bool inService,int state,int status); - bool insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op); + bool insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int stationId,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op); bool insertDynamicProperty(QUuid uuid,GroupStateValue groupValue); bool updateDynamicProperty(QUuid uuid,GroupStateValue groupValue); ComponentInfo getComponentInfoByUuid(QString uuid); diff --git a/diagramUtils/include/dataManager.h b/diagramUtils/include/dataManager.h index 186897f..1a0bb85 100644 --- a/diagramUtils/include/dataManager.h +++ b/diagramUtils/include/dataManager.h @@ -27,7 +27,7 @@ public: void updateModelData(const QString& sModel,QUuid uuid,const QString& sGroup,QMap mapPro); ModleStateMap& modelState(); - ModelDataMap& modelData(); + ModelDataMap& modelData(bool useCatch = false); //bool:使用缓存数据 private: ModleStateMap _modelStateInfo; //接收的模型结构信息(可直接返回引用) ModelDataMap _modleDataInfo; //模型实时数据(使用接口获取数据) diff --git a/diagramUtils/source/dataBase.cpp b/diagramUtils/source/dataBase.cpp index 0cda63b..a32756f 100644 --- a/diagramUtils/source/dataBase.cpp +++ b/diagramUtils/source/dataBase.cpp @@ -268,7 +268,7 @@ QSqlQuery DataBase::executeBatchSQL(const QStringList& sqlStatements, bool creat } -bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op) +bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int stationId,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op) { QSqlDatabase db = getDB(); if(db.open()) @@ -278,7 +278,7 @@ bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QStri QJsonDocument contextDoc(context); QString strCon = contextDoc.toJson(QJsonDocument::Compact); - qry.prepare("INSERT INTO component(global_uuid, model_name, nspath, tag, name, grid, zone, station, type, in_service, state, status, context, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + qry.prepare("INSERT INTO component(global_uuid, model_name, nspath, tag, name, grid, zone, station, station_id, type, in_service, state, status, context, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,uuid); qry.bindValue(1,modelName); qry.bindValue(2,nspath); @@ -287,13 +287,14 @@ bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QStri qry.bindValue(5,grid); qry.bindValue(6,zone); qry.bindValue(7,station); - qry.bindValue(8,type); - qry.bindValue(9,inService); - qry.bindValue(10,state); - qry.bindValue(11,status); - qry.bindValue(12,strCon); - qry.bindValue(13,op); - qry.bindValue(14,QDateTime::currentDateTime()); + qry.bindValue(8,stationId); + qry.bindValue(9,type); + qry.bindValue(10,inService); + qry.bindValue(11,state); + qry.bindValue(12,status); + qry.bindValue(13,strCon); + qry.bindValue(14,op); + qry.bindValue(15,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); const QVariantList list = qry.boundValues(); diff --git a/diagramUtils/source/dataManager.cpp b/diagramUtils/source/dataManager.cpp index 6040698..4cf07cb 100644 --- a/diagramUtils/source/dataManager.cpp +++ b/diagramUtils/source/dataManager.cpp @@ -282,11 +282,14 @@ ModleStateMap& DataManager::modelState() return _modelStateInfo; } -ModelDataMap& DataManager::modelData() +ModelDataMap& DataManager::modelData(bool useCatch) { - if(!_dataInitialised) - initialModelData(); - else - initialModelData(true); + if(!useCatch){ + if(!_dataInitialised) + initialModelData(); + else + initialModelData(true); + } + return _modleDataInfo; } diff --git a/include/diagramView.h b/include/diagramView.h index 568b675..433cc0d 100644 --- a/include/diagramView.h +++ b/include/diagramView.h @@ -36,6 +36,7 @@ public slots: void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单 void onItemChanged(QStandardItem *item); void onItemClicked(const QModelIndex &index); + void onPageSaved(const QString,int); void onEditorRbtnClicked(const QPoint &pos); //editor右键菜单 void onEditorDBClicked(QTreeWidgetItem* item, int column); diff --git a/source/diagramView.cpp b/source/diagramView.cpp index 645922b..7886d98 100644 --- a/source/diagramView.cpp +++ b/source/diagramView.cpp @@ -199,6 +199,18 @@ void DiagramView::onItemClicked(const QModelIndex &index) } } +void DiagramView::onPageSaved(const QString sPage,int id) +{ + for (int row = 0; row < _pModel->rowCount(); ++row) { + QStandardItem *item = _pModel->item(row, 0); + if (item && item->data(Qt::DisplayRole) == sPage) { + QStandardItem* pItem = new QStandardItem(sPage); + pItem->setData(id,Qt::UserRole); + _pModel->appendRow(pItem); + } + } +} + void DiagramView::onEditorRbtnClicked(const QPoint &pos) { QTreeWidgetItem *item = ui->treeWidget->itemAt(pos); diff --git a/source/mainwindow.cpp b/source/mainwindow.cpp index 1d3ce42..010a7b8 100644 --- a/source/mainwindow.cpp +++ b/source/mainwindow.cpp @@ -191,13 +191,13 @@ void CMainWindow::initializeAction() connect(m_pDiagramView,&DiagramView::diagramSelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectDiagram); connect(m_pDiagramView,&DiagramView::createProject,this,&CMainWindow::onAction_createEditor); connect(m_pDiagramCavas,&DiagramCavas::pannelSelected,m_pDiagramView,&DiagramView::onPanelActive); + connect(m_pDiagramCavas,&DiagramCavas::projectSaved,m_pDiagramView,&DiagramView::onPageSaved); connect(m_pDiagramCavas,&DiagramCavas::prepareUpdateItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onUpdateItems); connect(m_pDiagramCavas,&DiagramCavas::prepareSelectItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onSelectItems); connect(m_pDiagramCavas,&DiagramCavas::updateMonitorList,m_pMonitorPagesDlg,&MonitorPagesDlg::onMonitorCreated); connect(m_pDiagramCavas,&DiagramCavas::createdMonitorItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onMonitorCreated); connect(m_pDiagramCavas,&DiagramCavas::updateMonitorTopology,m_pTopologyView,&TopologyView::onMonitorUpdate); - connect(m_pMonitorItemsDlg,&MonitorItemsDlg::generateMonitor,m_pDiagramCavas,&DiagramCavas::onSignal_generate); connect(m_pMonitorPagesDlg,&MonitorPagesDlg::monitorSelected,m_pDiagramCavas,&DiagramCavas::onSignal_monitorSelected); connect(m_pMonitorPagesDlg,&MonitorPagesDlg::prepareSaveMonitor,m_pDiagramCavas,&DiagramCavas::onSignal_saveMonitor);