fix topology info update

This commit is contained in:
baiYue 2026-06-05 18:42:09 +08:00
parent df8de12160
commit 660a7649c9
15 changed files with 174 additions and 130 deletions

View File

@ -58,6 +58,7 @@ signals:
void updateMonitorTopology(QList<QUuid>); void updateMonitorTopology(QList<QUuid>);
void pannelSelected(QString sPanel,int nType); //界面选择信号,名称,类型(0:editor) void pannelSelected(QString sPanel,int nType); //界面选择信号,名称,类型(0:editor)
void clearTopology();
public slots: public slots:
void onSignal_addDrawingPanel(PowerEntity* p,DiagramMode = DM_edit,QString parent = QString()); //parent:派生运行时的page void onSignal_addDrawingPanel(PowerEntity* p,DiagramMode = DM_edit,QString parent = QString()); //parent:派生运行时的page
void onSignal_addGraphicsItem(ModelStateInfo&); void onSignal_addGraphicsItem(ModelStateInfo&);

View File

@ -64,6 +64,7 @@ public:
void prepareSaveEditor(); //准备保存 void prepareSaveEditor(); //准备保存
void loadBaseSetting(QUuid); void loadBaseSetting(QUuid);
void activePreview(); //激活预览 void activePreview(); //激活预览
void emitTopologySignals(); //发送拓扑数据
public slots: public slots:
void onWidthChanged(int width); void onWidthChanged(int width);
void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小 void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小
@ -80,7 +81,6 @@ private:
void processNormalContainerLevel(int level, const QList<ContainerDataPtr>& containers,LayoutBuilder& builder); void processNormalContainerLevel(int level, const QList<ContainerDataPtr>& containers,LayoutBuilder& builder);
void processTransformerLevel(const QList<ContainerDataPtr>& containers); void processTransformerLevel(const QList<ContainerDataPtr>& containers);
void finalizeConstruction(); void finalizeConstruction();
void emitTopologySignals();
signals: signals:
void panelDelete(const QString&,int); void panelDelete(const QString&,int);
void previewSelected(EditPanel*); //预览选中事件 void previewSelected(EditPanel*); //预览选中事件
@ -98,8 +98,6 @@ private:
int _maxWidth; int _maxWidth;
int _maxHeight; int _maxHeight;
QList<EditRowData*> _lstData; QList<EditRowData*> _lstData;
QList<HierarchyItem> _accumulatedBayItems;
QList<HierarchyItem> _accumulatedDeviceItems;
QMap<int,QMap<int,EditContainerItem*>> _mapStruct; QMap<int,QMap<int,EditContainerItem*>> _mapStruct;
DiagramEditorModel* _pModel; DiagramEditorModel* _pModel;
DiagramEditorPreviewDlg* _pPreview; DiagramEditorPreviewDlg* _pPreview;

View File

@ -76,6 +76,7 @@ public:
QByteArray getWizardInfo(); //返回二进制wizard设置 QByteArray getWizardInfo(); //返回二进制wizard设置
void setWizardInfo(const QByteArray&); //二进制设置wizard void setWizardInfo(const QByteArray&); //二进制设置wizard
void updateTolology(); //更新拓扑列表
signals: signals:
void updateTopologyItems(QList<HierarchyItem>,bool,bool); //更新当前拓扑列表 <连接关系,是否刷新,显示全部层级> void updateTopologyItems(QList<HierarchyItem>,bool,bool); //更新当前拓扑列表 <连接关系,是否刷新,显示全部层级>
private: private:
@ -94,5 +95,7 @@ private:
EditPanel* _pPanel; //主界面 EditPanel* _pPanel; //主界面
QPointer<DiagramEditorWizard> _pWizard; //向导界面数据 QPointer<DiagramEditorWizard> _pWizard; //向导界面数据
int _cableCount; //导线计数 int _cableCount; //导线计数
QList<HierarchyItem> _lstBay; //间隔层级信息
QList<HierarchyItem> _lstItem; //item层级信息
}; };

View File

@ -149,6 +149,7 @@ public:
void startHttpRequest(); //开始请求数据(运行时) void startHttpRequest(); //开始请求数据(运行时)
void setCavas(QPointer<DiagramCavas> p) {_cavas = p;} //设置所属顶层容器 void setCavas(QPointer<DiagramCavas> p) {_cavas = p;} //设置所属顶层容器
DiagramCavas* getCavas(); DiagramCavas* getCavas();
void updateTopologyLst(); //更新拓扑列表
QMap<QUuid,GraphicsProjectModelItem*> getProjectItems(){return _nodeItem;} QMap<QUuid,GraphicsProjectModelItem*> getProjectItems(){return _nodeItem;}
QMap<QUuid,GraphicsBaseModelItem*> getBaseModelItems(){return _baseItem;} QMap<QUuid,GraphicsBaseModelItem*> getBaseModelItems(){return _baseItem;}

View File

@ -307,6 +307,7 @@ void DiagramCavas::onSignal_loadPage(PowerEntity* p)
else //已存在 else //已存在
{ {
m_mapDrawPanel[p->name()].first->show(); m_mapDrawPanel[p->name()].first->show();
m_mapDrawPanel[p->name()].first->getModelController()->updateTopologyLst();
} }
} }
@ -324,6 +325,7 @@ void DiagramCavas::onSignal_loadEdit(const QString& sProject,QUuid uid)
m_mapEditPanel[sProject].first->show(); m_mapEditPanel[sProject].first->show();
m_mapEditPanel[sProject].first->activePreview(); m_mapEditPanel[sProject].first->activePreview();
setActiveSubWindow(m_mapEditPanel[sProject].second); setActiveSubWindow(m_mapEditPanel[sProject].second);
m_mapEditPanel[sProject].first->emitTopologySignals();
} }
} }
@ -407,6 +409,7 @@ void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
delete pPanel; delete pPanel;
} }
calculateLauncherVisible(); calculateLauncherVisible();
emit clearTopology();
} }
void DiagramCavas::onSignal_createEntity(EntityInfo info) void DiagramCavas::onSignal_createEntity(EntityInfo info)
@ -715,6 +718,7 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
void DiagramCavas::onSignal_unloadProject(const QString& sName) void DiagramCavas::onSignal_unloadProject(const QString& sName)
{ {
emit clearTopology();
BasePropertyManager::instance().clearEditorData(); BasePropertyManager::instance().clearEditorData();
for(auto &pair:m_mapEditPanel){ for(auto &pair:m_mapEditPanel){

View File

@ -61,7 +61,7 @@ void EditBusItem::setGeometry(const QRectF &rect)
void EditBusItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void EditBusItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
painter->fillRect(m_boundingRect,Qt::black); painter->fillRect(m_boundingRect,Qt::black);
painter->drawText(QPointF(-10,0),sName); painter->drawText(QPointF(-10,-5),sName);
} }
/********************Bay*********************/ /********************Bay*********************/
@ -131,7 +131,7 @@ void EditBayItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* optio
painter->setPen(QPen(m_normalColor, 2)); painter->setPen(QPen(m_normalColor, 2));
} }
painter->drawRect(m_boundingRect); painter->drawRect(m_boundingRect);
painter->drawText(QPointF(-10,0),sName); painter->drawText(QPointF(-10,-5),sName);
painter->setFont(QFont("Arial", 12)); painter->setFont(QFont("Arial", 12));
painter->setPen(Qt::cyan); painter->setPen(Qt::cyan);

View File

@ -465,6 +465,7 @@ void EditPanel::activePreview()
if(_pPreview){ if(_pPreview){
_pPreview->raise(); _pPreview->raise();
_pPreview->activateWindow(); _pPreview->activateWindow();
emitTopologySignals();
} }
} }
@ -482,8 +483,8 @@ void EditPanel::performCleanup() {
// 清理数据 // 清理数据
qDeleteAll(_lstData); qDeleteAll(_lstData);
_lstData.clear(); _lstData.clear();
_accumulatedBayItems.clear(); //_accumulatedBayItems.clear();
_accumulatedDeviceItems.clear(); //_accumulatedDeviceItems.clear();
// 清理主部件 // 清理主部件
_mainWidget = nullptr; _mainWidget = nullptr;
@ -553,8 +554,8 @@ void EditPanel::processNormalContainerLevel(int level,
} }
// 累积层级项 // 累积层级项
_accumulatedBayItems.append(result.bayItems); //_accumulatedBayItems.append(result.bayItems);
_accumulatedDeviceItems.append(result.deviceItems); //_accumulatedDeviceItems.append(result.deviceItems);
} }
// 保存行数据 // 保存行数据
@ -594,8 +595,8 @@ void EditPanel::processTransformerLevel(const QList<ContainerDataPtr>& container
rowLayout->addStretch(); rowLayout->addStretch();
// 累积变压器层级项 // 累积变压器层级项
_accumulatedBayItems.append(result.bayItems); //_accumulatedBayItems.append(result.bayItems);
_accumulatedDeviceItems.append(result.deviceItems); //_accumulatedDeviceItems.append(result.deviceItems);
} }
// 插入变压器行在层级0之后 // 插入变压器行在层级0之后
@ -618,19 +619,13 @@ void EditPanel::finalizeConstruction() {
_widgetLayout->addStretch(); _widgetLayout->addStretch();
// 发射拓扑更新信号 // 发射拓扑更新信号
emitTopologySignals(); //emitTopologySignals();
// 延迟初始化连接 // 延迟初始化连接
QTimer::singleShot(300, this, &EditPanel::initBlockConnection); QTimer::singleShot(300, this, &EditPanel::initBlockConnection);
} }
void EditPanel::emitTopologySignals() { void EditPanel::emitTopologySignals() {
if (_pModel) { if (_pModel)
emit _pModel->updateTopologyItems(_accumulatedBayItems, true, false); _pModel->updateTolology();
emit _pModel->updateTopologyItems(_accumulatedDeviceItems, false, false);
}
// 清空累积的数据
_accumulatedBayItems.clear();
_accumulatedDeviceItems.clear();
} }

View File

@ -940,7 +940,7 @@ QMap<int, QList<QString>> DiagramLayoutEngine::getCommonDirectionNode(QMap<QStri
void DiagramLayoutEngine::updateConfilicNode(QMap<QString, DiagramEditorRouteInfo>& routes,Context& context,const LayoutConfig& config,QMap<int, QList<QString>> directionToNames) void DiagramLayoutEngine::updateConfilicNode(QMap<QString, DiagramEditorRouteInfo>& routes,Context& context,const LayoutConfig& config,QMap<int, QList<QString>> directionToNames)
{ {
QMap<int, QList<QPair<QString, QString>>> directionConflicts; QMap<int, QList<QPair<QString, QString>>> directionConflicts; //key占用方向分支 value:first→占用方向相同的设备 second→ 共线lstMain中设备
QList<QString> lstMain; //主线设备 QList<QString> lstMain; //主线设备
QMap<QString,QList<QString>> mapSub; //支线设备 QMap<QString,QList<QString>> mapSub; //支线设备
for(auto& route:routes){ for(auto& route:routes){
@ -1001,10 +1001,23 @@ void DiagramLayoutEngine::updateConfilicNode(QMap<QString, DiagramEditorRouteInf
} }
if(!directionConflicts.isEmpty()){ if(!directionConflicts.isEmpty()){
const QString lastMainDev = lstMain.last();
for(auto& lstPair:directionConflicts){ for(auto& lstPair:directionConflicts){
if(lstPair.size() > 1){ //默认处理倒数第2个 QPair<QString, QString> targetPair;
QString sObj = lstPair[lstPair.size()-2].first;
relayoutTargetRoute(sObj,routes,context,config); for (const auto& pair : lstPair)
{
if (pair.second != lastMainDev)
{
targetPair = pair;
break;
}
}
// 如果找到了,才处理
if (!targetPair.first.isEmpty())
{
relayoutTargetRoute(targetPair.first,routes,context,config);
} }
} }
} }

View File

@ -221,107 +221,8 @@ void DrawingPanel::loadNodes(QJsonObject obj)
} }
} }
if(_pModel){ if(_pModel)
QString sG; _pModel->updateTopologyLst();
QString sZ;
QString sS;
for(auto& pBaseItem:_pModel->getProjectItems()) //取grid_zone_station(间隔不含这些内容)
{
BaseProperty* pBase = dynamic_cast<BaseProperty*>(pBaseItem->getProperty());
if(sG.isEmpty())
sG = pBase->grid();
if(sZ.isEmpty())
sZ = pBase->zone();
if(sS.isEmpty())
sS = pBase->station();
break;
}
QList<HierarchyItem> lstFirst;
for(auto& pOtherItem:_pModel->getProjectBayItems())
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
// 创建间隔项
HierarchyItem bayInfo;
bayInfo.item.nEquipType = 0; // 间隔的设备类型为0
bayInfo.item.nCategory = 1; // 类别为1表示间隔
bayInfo.item.sName = pBay->tag();
bayInfo.item.uid = pBay->uuid();
bayInfo.item.sVoltageLevel = QString::number(pBay->getVoltage());
bayInfo.item.grid = sG;
bayInfo.item.zone = sZ;
bayInfo.item.station = sS;
lstFirst.append(bayInfo);
}
}
emit _pModel->updateCurrentItems(lstFirst, true);
emit _pModel->updateTopologyItems(lstFirst, true,true);
// 第二阶段:处理所有设备
QList<HierarchyItem> lstSecond;
// 建立间隔UUID到间隔标签的映射提高查找效率
QHash<QString, QString> bayUuidToTag;
for(auto& pOtherItem:_pModel->getProjectBayItems())
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
bayUuidToTag[pBay->uuid().toString()] = pBay->tag();
}
}
for(auto& pBaseItem:_pModel->getProjectItems())
{
BaseProperty* pBase = dynamic_cast<BaseProperty*>(pBaseItem->getProperty());
HierarchyItem info;
info.item.nEquipType = pBase->type();
info.item.nCategory = 0; // 类别为0表示设备
info.item.sName = pBase->name();
info.item.uid = pBase->uuid();
// 查找设备所属的间隔
QString bayTag;
QString bayUuid;
QString sVoltage;
// 通过间隔标签直接查找
bayTag = pBase->getBay();
// 如果需要间隔UUID可以反向查找
if(!bayTag.isEmpty()){
for(auto& pOtherItem:_pModel->getProjectBayItems()){
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay && pBay->tag() == bayTag){
bayUuid = pBay->uuid().toString();
sVoltage = QString::number(pBay->getVoltage());
break;
}
}
}
if(!bayTag.isEmpty()){
// 设置父间隔信息
info.parent.nEquipType = 0;
info.parent.nCategory = 1;
info.parent.sName = bayTag;
info.parent.uid = QUuid(bayUuid);
info.parent.sVoltageLevel = sVoltage;
info.parent.grid = sG;
info.parent.zone = sZ;
info.parent.station = sS;
}
lstSecond.append(info);
}
emit _pModel->updateCurrentItems(lstSecond, false);
emit _pModel->updateTopologyItems(lstSecond, false,true);
}
} }
void DrawingPanel::saveNodes(int pageId) void DrawingPanel::saveNodes(int pageId)

View File

@ -164,7 +164,7 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s
QByteArray byte; QByteArray byte;
if(nType == 1){ //母线 if(nType == 1){ //母线
byte = DataBase::GetInstance()->ModelType()[nType].icon; byte = DataBase::GetInstance()->ModelType()[nType].icon;
auto pBus = new ElectricBaseModelSvgBus(QRect(-200, -3, 400, 6)); auto pBus = new ElectricBaseModelSvgBus(QRect(-200, -2, 400, 4));
pBus->loadSvg(byte); pBus->loadSvg(byte);
pItem = pBus; pItem = pBus;
pItem->setItemType(GIT_baseBus); pItem->setItemType(GIT_baseBus);
@ -254,7 +254,7 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s
else if(nType == 13){ //电缆出线套筒 else if(nType == 13){ //电缆出线套筒
byte = DataBase::GetInstance()->ModelType()[nType].icon; byte = DataBase::GetInstance()->ModelType()[nType].icon;
auto pCableTer = new ElectricBaseModelSvgItem(QRect(-10, -10, 20, 20)); auto pCableTer = new ElectricBaseModelSvgItem(QRect(-15, -15, 30, 30));
pCableTer->loadSvg(byte); pCableTer->loadSvg(byte);
pItem = pCableTer; pItem = pCableTer;
pItem->setItemType(GIT_baseCableTer); pItem->setItemType(GIT_baseCableTer);
@ -340,6 +340,7 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s
addPreviewItem(uid,pItem,mode); addPreviewItem(uid,pItem,mode);
_pCurPreviewScene->addItem(pItem); _pCurPreviewScene->addItem(pItem);
pItem->setPos(pos); pItem->setPos(pos);
pItem->setSelected(false);
} }
return pItem; return pItem;
} }
@ -793,6 +794,8 @@ void DiagramEditorModel::generatePreview(bool bVisible)
} }
emit updateTopologyItems(lstBay,true,false); emit updateTopologyItems(lstBay,true,false);
emit updateTopologyItems(lstItem,false,false); emit updateTopologyItems(lstItem,false,false);
_lstBay = lstBay;
_lstItem = lstItem;
} }
} }
@ -936,6 +939,12 @@ void DiagramEditorModel::refreshConnection()
} }
} }
} }
if(_pCurPreviewScene){
for (QGraphicsItem *item : _pCurPreviewScene->items()) {
item->setSelected(true);
}
_pCurPreviewScene->clearSelection();
}
} }
void DiagramEditorModel::applyLayoutResult(const LayoutResult& result) { void DiagramEditorModel::applyLayoutResult(const LayoutResult& result) {
@ -1348,13 +1357,13 @@ void DiagramEditorModel::clearCompoDir(QMap<QString,DiagramEditorRouteInfo>& dat
int nVal = pItemName->data().toInt(); int nVal = pItemName->data().toInt();
pItemName->setData(QString::number(0)); //在公用模型中更新设备方向占用(重要) pItemName->setData(QString::number(0)); //在公用模型中更新设备方向占用(重要)
//pItemName->setData(QPoint(0,0),Qt::UserRole+2); //设置相对位置 //pItemName->setData(QPoint(0,0),Qt::UserRole+2); //设置相对位置
pItemName->setData(0,Qt::UserRole+5); //旋转 //pItemName->setData(0,Qt::UserRole+5); //旋转
} }
} }
for(auto &compoInfo:compos){ for(auto &compoInfo:compos){
compoInfo.nUsedDirection = 0; compoInfo.nUsedDirection = 0;
compoInfo.nRotate = 0; //compoInfo.nRotate = 0;
} }
} }
} }
@ -2486,6 +2495,12 @@ void DiagramEditorModel::setWizardInfo(const QByteArray& btye)
_pWizard->setPara(info); _pWizard->setPara(info);
} }
void DiagramEditorModel::updateTolology()
{
emit updateTopologyItems(_lstBay,true,false);
emit updateTopologyItems(_lstItem,false,false);
}
QByteArray DiagramEditorModel::serializeWizardData(const DiagramEditorProjectInfo &data) QByteArray DiagramEditorModel::serializeWizardData(const DiagramEditorProjectInfo &data)
{ {
QByteArray byteArray; QByteArray byteArray;

View File

@ -1691,6 +1691,109 @@ DiagramCavas* FixedPortsModel::getCavas()
return nullptr; return nullptr;
} }
void FixedPortsModel::updateTopologyLst()
{
QString sG;
QString sZ;
QString sS;
for(auto& pBaseItem:getProjectItems()) //取grid_zone_station(间隔不含这些内容)
{
BaseProperty* pBase = dynamic_cast<BaseProperty*>(pBaseItem->getProperty());
if(sG.isEmpty())
sG = pBase->grid();
if(sZ.isEmpty())
sZ = pBase->zone();
if(sS.isEmpty())
sS = pBase->station();
break;
}
QList<HierarchyItem> lstFirst;
for(auto& pOtherItem:getProjectBayItems())
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
// 创建间隔项
HierarchyItem bayInfo;
bayInfo.item.nEquipType = 0; // 间隔的设备类型为0
bayInfo.item.nCategory = 1; // 类别为1表示间隔
bayInfo.item.sName = pBay->tag();
bayInfo.item.uid = pBay->uuid();
bayInfo.item.sVoltageLevel = QString::number(pBay->getVoltage());
bayInfo.item.grid = sG;
bayInfo.item.zone = sZ;
bayInfo.item.station = sS;
lstFirst.append(bayInfo);
}
}
emit updateCurrentItems(lstFirst, true);
emit updateTopologyItems(lstFirst, true,true);
// 第二阶段:处理所有设备
QList<HierarchyItem> lstSecond;
// 建立间隔UUID到间隔标签的映射提高查找效率
QHash<QString, QString> bayUuidToTag;
for(auto& pOtherItem:getProjectBayItems())
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
bayUuidToTag[pBay->uuid().toString()] = pBay->tag();
}
}
for(auto& pBaseItem:getProjectItems())
{
BaseProperty* pBase = dynamic_cast<BaseProperty*>(pBaseItem->getProperty());
HierarchyItem info;
info.item.nEquipType = pBase->type();
info.item.nCategory = 0; // 类别为0表示设备
info.item.sName = pBase->name();
info.item.uid = pBase->uuid();
// 查找设备所属的间隔
QString bayTag;
QString bayUuid;
QString sVoltage;
// 通过间隔标签直接查找
bayTag = pBase->getBay();
// 如果需要间隔UUID可以反向查找
if(!bayTag.isEmpty()){
for(auto& pOtherItem:getProjectBayItems()){
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay && pBay->tag() == bayTag){
bayUuid = pBay->uuid().toString();
sVoltage = QString::number(pBay->getVoltage());
break;
}
}
}
if(!bayTag.isEmpty()){
// 设置父间隔信息
info.parent.nEquipType = 0;
info.parent.nCategory = 1;
info.parent.sName = bayTag;
info.parent.uid = QUuid(bayUuid);
info.parent.sVoltageLevel = sVoltage;
info.parent.grid = sG;
info.parent.zone = sZ;
info.parent.station = sS;
}
lstSecond.append(info);
}
emit updateCurrentItems(lstSecond, false);
emit updateTopologyItems(lstSecond, false,true);
}
void FixedPortsModel::addPortsToItem_json(PortState sta,QJsonArray jArr,GraphicsBaseItem* pItem) void FixedPortsModel::addPortsToItem_json(PortState sta,QJsonArray jArr,GraphicsBaseItem* pItem)
{ {
for(QJsonValueRef portJson:jArr) for(QJsonValueRef portJson:jArr)

View File

@ -104,6 +104,7 @@ int GraphicsBaseItem::addPort(PortState typ,QPointF vec,QString id,HandleType hT
m_vecHanle.insert(ntagId,pPort); m_vecHanle.insert(ntagId,pPort);
pPort->setParent(this); pPort->setParent(this);
pPort->setPos(vec); pPort->setPos(vec);
pPort->setSelected(false);
m_mapPort.insert(pPort->getId(),pPort); m_mapPort.insert(pPort->getId(),pPort);
return ntagId; return ntagId;

View File

@ -24,6 +24,7 @@ public:
void initial(); void initial();
void loadTopologyFromDB(); //加载拓扑关系 void loadTopologyFromDB(); //加载拓扑关系
void clearItems();
signals: signals:
void entityCreate(EntityInfo); void entityCreate(EntityInfo);
void entityChange(EntityInfo); void entityChange(EntityInfo);
@ -34,8 +35,8 @@ public slots:
void onItemClicked(const QModelIndex &index); void onItemClicked(const QModelIndex &index);
void onUpdateTopology(QList<HierarchyItem> lst,bool refresh,bool bFull); void onUpdateTopology(QList<HierarchyItem> lst,bool refresh,bool bFull);
void onMonitorUpdate(QList<QUuid>); //更新运行时 void onMonitorUpdate(QList<QUuid>); //更新运行时
void onDiagramClose(); //组态关闭
private: private:
void clearItems();
QString getLevelType(int index); QString getLevelType(int index);
void buildTreeStructure(QStandardItemModel* model, const QVector<ExtraProperty>& properties); void buildTreeStructure(QStandardItemModel* model, const QVector<ExtraProperty>& properties);
QVector<ExtraProperty> getPropertiesForNode(QStandardItem* node); QVector<ExtraProperty> getPropertiesForNode(QStandardItem* node);

View File

@ -183,6 +183,7 @@ void CMainWindow::initializeAction()
connect(m_pTopologyView,&TopologyView::entitySelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectEntity); connect(m_pTopologyView,&TopologyView::entitySelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectEntity);
connect(m_pDiagramCavas,&DiagramCavas::prepareUpdateTopology,m_pTopologyView,&TopologyView::onUpdateTopology); connect(m_pDiagramCavas,&DiagramCavas::prepareUpdateTopology,m_pTopologyView,&TopologyView::onUpdateTopology);
connect(m_pDiagramCavas,&DiagramCavas::clearTopology,m_pTopologyView,&TopologyView::onDiagramClose);
//connect(m_pDiagramView,&DiagramView::diagramCreate,m_pDiagramCavas,&DiagramCavas::onSignal_createDiagram); //connect(m_pDiagramView,&DiagramView::diagramCreate,m_pDiagramCavas,&DiagramCavas::onSignal_createDiagram);
connect(m_pDiagramView,&DiagramView::diagramChange,m_pDiagramCavas,&DiagramCavas::onSignal_changeDiagram); connect(m_pDiagramView,&DiagramView::diagramChange,m_pDiagramCavas,&DiagramCavas::onSignal_changeDiagram);
@ -360,6 +361,7 @@ void CMainWindow::onAction_createEditor()
connect(m_pCreateEdiotr,&CreateEditor::projectCreated,this,[&](){ connect(m_pCreateEdiotr,&CreateEditor::projectCreated,this,[&](){
ProjectManager::instance().unloadEditorProject(QString()); ProjectManager::instance().unloadEditorProject(QString());
m_pDiagramView->clearProjectTree(); m_pDiagramView->clearProjectTree();
m_pTopologyView->clearItems();
}); });
} }
@ -369,6 +371,7 @@ void CMainWindow::onAction_createEditor()
void CMainWindow::onAction_unloadEditor(const QString& str) void CMainWindow::onAction_unloadEditor(const QString& str)
{ {
m_pDiagramCavas->onSignal_unloadProject(str); m_pDiagramCavas->onSignal_unloadProject(str);
m_pTopologyView->clearItems();
} }
void CMainWindow::onCavasItemSelected(QObject* obj) void CMainWindow::onCavasItemSelected(QObject* obj)

View File

@ -150,6 +150,11 @@ void TopologyView::onMonitorUpdate(QList<QUuid> lst)
_treeView->expandAll(); _treeView->expandAll();
} }
void TopologyView::onDiagramClose()
{
clearItems();
}
void TopologyView::onUpdateTopologyFull(QList<HierarchyItem> lst, bool refresh) void TopologyView::onUpdateTopologyFull(QList<HierarchyItem> lst, bool refresh)
{ {
// 第一阶段处理间隔节点nCategory == 1 // 第一阶段处理间隔节点nCategory == 1