modify monitor data structure

This commit is contained in:
baiYue 2025-11-14 19:31:09 +08:00
parent 0354edfcfb
commit f0feb9c0c1
83 changed files with 2330 additions and 491 deletions

View File

@ -52,6 +52,8 @@ set(H_HEADER_FILES
include/diagramView.h include/diagramView.h
include/topologyTree.h include/topologyTree.h
include/createEditor.h include/createEditor.h
include/monitorItemsDlg.h
include/monitorPagesDlg.h
common/include/global.h common/include/global.h
common/include/tools.h common/include/tools.h
@ -80,6 +82,8 @@ set(CPP_SOURCE_FILES
source/diagramView.cpp source/diagramView.cpp
source/topologyTree.cpp source/topologyTree.cpp
source/createEditor.cpp source/createEditor.cpp
source/monitorItemsDlg.cpp
source/monitorPagesDlg.cpp
common/source/httpInterface.cpp common/source/httpInterface.cpp
common/source/global.cpp common/source/global.cpp
@ -94,6 +98,8 @@ set(UI_FILES
ui/topologyView.ui ui/topologyView.ui
ui/diagramView.ui ui/diagramView.ui
ui/createEditor.ui ui/createEditor.ui
ui/monitorItemsDlg.ui
ui/monitorPagesDlg.ui
) )
# #

View File

@ -20,11 +20,14 @@ public:
virtual QString name() const {return sName;} virtual QString name() const {return sName;}
virtual void setContext(QJsonObject j){jContext = j;} virtual void setContext(QJsonObject j){jContext = j;}
virtual QJsonObject context() const {return jContext;} virtual QJsonObject context() const {return jContext;}
virtual void setSubList(QList<QPair<int,QUuid>> lst) {subList = lst;}
virtual QList<QPair<int,QUuid>>& getSubList() {return subList;}
protected: protected:
QUuid uUid; QUuid uUid;
QString sTag; QString sTag;
QString sName; QString sName;
QJsonObject jContext; //存放port信息 QJsonObject jContext; //存放port信息
QList<QPair<int,QUuid>> subList; //可能存在的子对象(不用来拓朴计算) <类型uid> //类型0:设备 1:间隔
}; };
class BayProperty:public AbstractProperty //间隔属性(待扩展) class BayProperty:public AbstractProperty //间隔属性(待扩展)

View File

@ -82,7 +82,8 @@ enum class ModelFunctionType //模型函数的类型
ProjectModel = 0, ProjectModel = 0,
BaseModel, BaseModel,
EditorModel, EditorModel,
BlockEditorModel //模块划分时的连接关系 BlockEditorModel, //模块划分时的连接关系
RuntimeModel //运行时
}; };
@ -659,6 +660,7 @@ struct DiagramEditorBlockInfo //组态编辑block信息
int nContainerLevel; //所处容器的层级 0,1,2,3 int nContainerLevel; //所处容器的层级 0,1,2,3
QUuid uid; QUuid uid;
QList<QUuid> _lstCon; //连接信息 QList<QUuid> _lstCon; //连接信息
QList<QPair<int,QUuid>> _lstSub; //子对象列表(非拓扑计算使用) 如母线子对象为间隔间隔子对象为item电动机子对象为item <类型uid> 类型0设备1间隔
QRectF recSize; //当前大小(根据内容确定) QRectF recSize; //当前大小(根据内容确定)
QPointF sceneDelta; //block中心相对位移(计算布局位置 QPointF sceneDelta; //block中心相对位移(计算布局位置
bool bEditState; //详细编辑状态 bool bEditState; //详细编辑状态
@ -1003,6 +1005,32 @@ struct pageInfo
int op; int op;
}; };
struct monitorRelationSturctItem //监控关系结构item
{
int nCategory; //类型 0设备1间隔
int nEquipType; //设备类别
QString sName; //名称
QUuid uid; //id
};
struct monitorRelationItem //监控关系item
{
monitorRelationSturctItem parent;
monitorRelationSturctItem item;
QList<monitorRelationSturctItem> subList;
};
struct monitorPageInfo //运行时page
{
int id = -1;
QUuid uid;
QString tag;
QString name;
QString parent;
QJsonObject context;
QString ts;
};
struct gridInfo struct gridInfo
{ {
int id = -1; int id = -1;

View File

@ -67,6 +67,11 @@ private:
}; };
int getLevel(QStandardItem *item); int getLevel(QStandardItem *item);
QStandardItem* findStandardItemAtLevel(QStandardItemModel *model, int targetLevel,
const QString &targetText,
QStandardItem *parent = nullptr,
int currentLevel = 0);
QList<QStandardItem*> getAllChildren(QStandardItem* parentItem);
QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target, QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target,
int role = Qt::DisplayRole, const QModelIndex& parent = QModelIndex()); int role = Qt::DisplayRole, const QModelIndex& parent = QModelIndex());

View File

@ -63,7 +63,7 @@ BaseProperty::BaseProperty(QObject* parent)
BaseProperty::~BaseProperty() BaseProperty::~BaseProperty()
{ {
qDebug()<<"release by "<<uuid(); //qDebug()<<"release by "<<uuid();
} }
/*************************属性变量*************************/ /*************************属性变量*************************/

View File

@ -16,6 +16,70 @@ int getLevel(QStandardItem *item) {
} }
} }
QStandardItem* findStandardItemAtLevel(QStandardItemModel *model, int targetLevel,
const QString &targetText,
QStandardItem *parent,
int currentLevel) {
if (!model) return nullptr;
if (currentLevel == targetLevel) {
if (parent) {
// 在父项的子树中查找
for (int row = 0; row < parent->rowCount(); ++row) {
QStandardItem *item = parent->child(row, 0);
if (item && item->text() == targetText) {
return item;
}
}
} else {
// 在根层级查找
for (int row = 0; row < model->rowCount(); ++row) {
QStandardItem *item = model->item(row, 0);
if (item && item->text() == targetText) {
return item;
}
}
}
return nullptr;
}
if (currentLevel > targetLevel) return nullptr;
// 递归查找子项
if (parent) {
for (int row = 0; row < parent->rowCount(); ++row) {
QStandardItem *child = parent->child(row, 0);
QStandardItem *result = findStandardItemAtLevel(model, targetLevel, targetText, child, currentLevel + 1);
if (result) return result;
}
} else {
for (int row = 0; row < model->rowCount(); ++row) {
QStandardItem *item = model->item(row, 0);
QStandardItem *result = findStandardItemAtLevel(model, targetLevel, targetText, item, currentLevel + 1);
if (result) return result;
}
}
return nullptr;
}
QList<QStandardItem*> getAllChildren(QStandardItem* parentItem) {
QList<QStandardItem*> children;
if (!parentItem) return children;
for (int row = 0; row < parentItem->rowCount(); ++row) {
for (int column = 0; column < parentItem->columnCount(); ++column) {
QStandardItem* childItem = parentItem->child(row, column);
if (childItem) {
children.append(childItem);
}
}
}
return children;
}
QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target, QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target,
int role, const QModelIndex& parent) { int role, const QModelIndex& parent) {
for (int row = 0; row < model->rowCount(parent); ++row) { for (int row = 0; row < model->rowCount(parent); ++row) {

View File

@ -5,7 +5,9 @@ set(DIAGRAMCAVAS_HEADER_FILES
include/designerScene.h include/designerScene.h
include/designerView.h include/designerView.h
include/diagramCavas.h include/diagramCavas.h
include/baseDrawingPanel.h
include/drawingPanel.h include/drawingPanel.h
include/monitorPanel.h
include/itemPropertyDlg.h include/itemPropertyDlg.h
include/propertyContentDlg.h include/propertyContentDlg.h
include/serializable.h include/serializable.h
@ -112,7 +114,9 @@ set(DIAGRAMCAVAS_SOURCE_FILES
source/designerScene.cpp source/designerScene.cpp
source/designerView.cpp source/designerView.cpp
source/diagramCavas.cpp source/diagramCavas.cpp
source/baseDrawingPanel.cpp
source/drawingPanel.cpp source/drawingPanel.cpp
source/monitorPanel.cpp
source/itemPropertyDlg.cpp source/itemPropertyDlg.cpp
source/propertyContentDlg.cpp source/propertyContentDlg.cpp
source/statusBar.cpp source/statusBar.cpp
@ -211,7 +215,6 @@ set(DIAGRAMCAVAS_SOURCE_FILES
) )
set(UI_FILES set(UI_FILES
ui/drawingPanel.ui
ui/itemPropertyDlg.ui ui/itemPropertyDlg.ui
ui/baseInfoDlg.ui ui/baseInfoDlg.ui
ui/ptExtraInfoDlg.ui ui/ptExtraInfoDlg.ui

View File

@ -0,0 +1,59 @@
#ifndef BASEDRAWINGPANEL_H
#define BASEDRAWINGPANEL_H
/****************工程模和运行时panel的基类*****************/
#include <QWidget>
#include "global.h"
#include "designerScene.h"
class DesignerView;
class DesignerScene;
class SelectorManager;
class GraphicsItemGroup;
class StatusBar;
class PowerEntity;
class ProjectDiagramNameInput;
class BayManagerDlg;
class BaseDrawingPanel : public QWidget
{
Q_OBJECT
public:
BaseDrawingPanel(PowerEntity* pEntity,QWidget *parent = nullptr,DiagramMode mode = DM_edit);
~BaseDrawingPanel();
QGraphicsScene* getQGraphicsScene();
DesignerScene* getDesignerScene();
SelectorManager* selectorManager() const; //返回manager指针
void setPageName(QString s){_name = s;_pModel->setPageName(_name);} //设置当前page名称
QString pageName(){return _name;}
FixedPortsModel* getModelController() const {return _pModel;}
DiagramMode getMode(){return _mode;}
virtual void loadNodes(QJsonObject obj) {}; //加载图元信息
virtual void saveNodes(int pageId) {}; //保存到数据库
DesignerScene* getScene() {return m_pGraphicsScene;}
DesignerView* getView() {return m_pGraphicsView;}
signals:
void panelDelete(const QString&,int);
protected:
virtual void closeEvent(QCloseEvent *closeEvent) {};
protected:
DesignerView* m_pGraphicsView;
DesignerScene* m_pGraphicsScene;
SelectorManager* m_pSelectorManager;
StatusBar* m_pStatusBar;
FixedPortsModel* _pModel;
DiagramMode _mode;
QString _name;
PowerEntity* _pEntity; //组态图拓扑对象
};
#endif

View File

@ -11,15 +11,15 @@ public:
ElectricBaseModelSvgItem(const QRect &rect, QGraphicsItem *parent = 0); //genNewPort生成新接线点 ElectricBaseModelSvgItem(const QRect &rect, QGraphicsItem *parent = 0); //genNewPort生成新接线点
ElectricBaseModelSvgItem(const ElectricBaseModelSvgItem&); ElectricBaseModelSvgItem(const ElectricBaseModelSvgItem&);
virtual ElectricBaseModelSvgItem* clone() const override; virtual ElectricBaseModelSvgItem* clone() const override;
virtual ~ElectricBaseModelSvgItem(); virtual ~ElectricBaseModelSvgItem() override;
void updateCoordinate(); void updateCoordinate() override;
void move(const QPointF&); void move(const QPointF&) override;
void loadSvg(const QByteArray&); void loadSvg(const QByteArray&);
protected: protected:
virtual QPainterPath shape(); virtual QPainterPath shape() override;
virtual void editShape(int, const QPointF&); virtual void editShape(int, const QPointF&) override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
protected: protected:
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QRectF m_lastBoudingRect; //记录上一时刻的boundingRect

View File

@ -6,7 +6,7 @@
#include "graphicsDataModel/fixedPortsModel.h" #include "graphicsDataModel/fixedPortsModel.h"
class GraphicsItemGroup; class GraphicsItemGroup;
class DrawingPanel; class BaseDrawingPanel;
class DesignerScene : public BaseScene class DesignerScene : public BaseScene
@ -42,7 +42,7 @@ protected:
private: private:
bool m_bGridVisible; bool m_bGridVisible;
QGraphicsView* m_pView; QGraphicsView* m_pView;
DrawingPanel* m_pDrawingPanel; //保存父指针 BaseDrawingPanel* m_pDrawingPanel; //保存父指针
private: private:
FixedPortsModel* _graphModel; FixedPortsModel* _graphModel;

View File

@ -15,6 +15,7 @@ class DiagramEditorWizard;
class EditPanel; class EditPanel;
class GraphicsBaseModelItem; class GraphicsBaseModelItem;
class EditBaseItem; class EditBaseItem;
class MonitorPanel;
class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea
{ {
@ -26,15 +27,22 @@ public:
DrawingPanel* getPanel(QString); DrawingPanel* getPanel(QString);
EditPanel* getEditPanel(QString); EditPanel* getEditPanel(QString);
MonitorPanel* getMonitorPanel(QString);
public: public:
void initial(); void initial();
signals:
void prepareUpdateItems(QList<monitorRelationItem>,bool refresh);
void prepareSelectItems(QList<QPair<QString,QUuid>>);
void updateMonitorList(QString,QPair<QString,QUuid>,int nMode = 0); //0新增1删除
void createdMonitorItems(QList<QPair<QString,QUuid>>); //创建的监控中item个数
public slots: public slots:
void onSignal_addDrawingPanel(PowerEntity* p,DiagramMode = DM_edit); void onSignal_addDrawingPanel(PowerEntity* p,DiagramMode = DM_edit,QString parent = QString()); //parent:派生运行时的page
void onSignal_addGraphicsItem(modelStateInfo&); void onSignal_addGraphicsItem(modelStateInfo&);
void onSignal_addPage(); void onSignal_addPage();
void onSignal_savePage(); void onSignal_savePage();
void onSignal_loadPage(PowerEntity* p); void onSignal_loadPage(PowerEntity* p);
void onSignal_loadEdit(const QString&,QUuid); void onSignal_loadEdit(const QString&,QUuid);
void onSignal_loadMonitor(PowerEntity* p);
void runPage(const QString); //运行时 void runPage(const QString); //运行时
void onSignal_runPage(); void onSignal_runPage();
void onSignal_deletePage(); void onSignal_deletePage();
@ -47,7 +55,7 @@ public slots:
void onSignal_deleteEntity(EntityInfo); void onSignal_deleteEntity(EntityInfo);
void onSignal_selectEntity(EntityInfo); void onSignal_selectEntity(EntityInfo);
void onSignal_createDiagram(DiagramInfo); void onSignal_createDiagram(DiagramInfo,DiagramMode mode = DM_edit);
void onSignal_changeDiagram(DiagramInfo); void onSignal_changeDiagram(DiagramInfo);
void onSignal_deleteDiagram(DiagramInfo); void onSignal_deleteDiagram(DiagramInfo);
void onSignal_selectDiagram(DiagramInfo); void onSignal_selectDiagram(DiagramInfo);
@ -64,11 +72,25 @@ public slots:
void onSignal_unloadProject(const QString&); void onSignal_unloadProject(const QString&);
/*********************************间隔**************************************/ /*********************************间隔**************************************/
void onSignl_openCurrentBay(); void onSignl_openCurrentBay();
/********************************运行时**********************************/
void onSignal_updateCurItems(QList<monitorRelationItem>,bool); //更新当前设备列表
void onSignal_selectedItems(QList<QPair<QString,QUuid>>); //当前选中设备
void onSignal_generate(QString,QList<QPair<QString,QUuid>>); //使用选中设备生成监控 (监控名,设备)
void onSignal_monitorCreated(QString,QPair<QString,QUuid>); //监控已创建
void onSignal_monitorItemCreated(QList<QPair<QString,QUuid>>); //监控中创建的对象
void onSignal_monitorSelected(DiagramInfo); //监控选中
void onSignal_saveMonitor(QList<QPair<QString,QUuid>>); //保存选中的监控
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> getMapDraw() {return m_mapDrawPanel;}
QMap<QString,QPair<EditPanel*,QMdiSubWindow*>> getMapEdit() {return m_mapEditPanel;}
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> getMapMonitor() {return m_mapMonitorPanel;}
private: private:
void removePanel(PowerEntity*); void removePanel(PowerEntity*);
private: private:
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel; QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel; //工程模panel
QMap<QString,QPair<EditPanel*,QMdiSubWindow*>> m_mapEditPanel; QMap<QString,QPair<EditPanel*,QMdiSubWindow*>> m_mapEditPanel; //编辑时
QMap<QString,QPair<MonitorPanel*,QMdiSubWindow*>> m_mapMonitorPanel; //监控时panel
int _pageIndex; int _pageIndex;
QString _curPage; QString _curPage;
}; };

View File

@ -23,6 +23,18 @@ public:
virtual void removeConnect(QUuid); virtual void removeConnect(QUuid);
virtual QList<QUuid> getConnect() {return _lstCon;} virtual QList<QUuid> getConnect() {return _lstCon;}
virtual void clearConnect() {_lstCon.clear();} virtual void clearConnect() {_lstCon.clear();}
virtual bool addSubList(QPair<int,QUuid> pair){
for (const auto& item : _lstSub) {
if (item.second == pair.second) {
return false;
}
}
_lstSub.append(pair);
return true;
}
virtual void setSubList(QList<QPair<int,QUuid>> lst) {_lstSub = lst;}
virtual QList<QPair<int,QUuid>>& getSubList() {return _lstSub;}
virtual void clearSubList() {_lstSub.clear();}
virtual void setCurContainer(DiagramEditorStructContainer* p) {_curContainer = p;} virtual void setCurContainer(DiagramEditorStructContainer* p) {_curContainer = p;}
virtual DiagramEditorStructContainer* getCurContainer() {return _curContainer;} virtual DiagramEditorStructContainer* getCurContainer() {return _curContainer;}
virtual void setContainerLevel(int n) {nContainerLevel = n;} virtual void setContainerLevel(int n) {nContainerLevel = n;}
@ -41,6 +53,7 @@ protected:
int nContainerLevel; //所处容器的层级 0,1,2,3 int nContainerLevel; //所处容器的层级 0,1,2,3
QUuid uid; QUuid uid;
QList<QUuid> _lstCon; //连接信息 QList<QUuid> _lstCon; //连接信息
QList<QPair<int,QUuid>> _lstSub; //子对象列表(非拓扑计算使用) 如母线子对象为间隔间隔子对象为item电动机子对象为item <类型uid> 类型0设备1间隔
QRectF recSize; //当前大小(根据内容确定) QRectF recSize; //当前大小(根据内容确定)
QPointF sceneDelta; //block中心相对位移(计算布局位置 QPointF sceneDelta; //block中心相对位移(计算布局位置
bool bEditState; //详细编辑状态 bool bEditState; //详细编辑状态

View File

@ -2,23 +2,12 @@
#define DRAWINGPANEL_H #define DRAWINGPANEL_H
#include <QWidget> #include <QWidget>
#include "global.h" #include "baseDrawingPanel.h"
#include "designerScene.h"
QT_BEGIN_NAMESPACE
namespace Ui { class drawingPanel; }
QT_END_NAMESPACE
class DesignerView;
class DesignerScene;
class SelectorManager;
class GraphicsItemGroup;
class StatusBar;
class PowerEntity; class PowerEntity;
class ProjectDiagramNameInput; class ProjectDiagramNameInput;
class BayManagerDlg;
class DrawingPanel : public QWidget class DrawingPanel : public BaseDrawingPanel
{ {
Q_OBJECT Q_OBJECT
@ -26,47 +15,15 @@ public:
DrawingPanel(PowerEntity* pEntity,QWidget *parent = nullptr,DiagramMode mode = DM_edit); DrawingPanel(PowerEntity* pEntity,QWidget *parent = nullptr,DiagramMode mode = DM_edit);
~DrawingPanel(); ~DrawingPanel();
QGraphicsScene* getQGraphicsScene();
DesignerScene* getDesignerScene();
void grahpicsViewZoomIn();
void grahpicsViewZoomOut();
void grahpicsViewZoomFit();
GraphicsItemGroup* createItemGroup();
void destroyItemGroup();
SelectorManager* selectorManager() const; //返回manager指针
void setPageName(QString s){_name = s;_pModel->setPageName(_name);} //设置当前page名称
QString pageName(){return _name;}
FixedPortsModel* getModelController() const {return _pModel;}
DiagramMode getMode(){return _mode;}
QJsonObject getDiagramInfo() const; //返回图元位置信息 QJsonObject getDiagramInfo() const; //返回图元位置信息
void loadNodes(QJsonObject obj); //加载图元信息 void loadNodes(QJsonObject obj) override; //加载图元信息
void saveNodes(int pageId); //保存到数据库 void saveNodes(int pageId) override; //保存到数据库
DesignerScene* getScene() {return m_pGraphicsScene;}
DesignerView* getView() {return m_pGraphicsView;}
signals:
void panelDelete(const QString&,int);
protected: protected:
void closeEvent(QCloseEvent *closeEvent); void closeEvent(QCloseEvent *closeEvent) override;
public slots: public slots:
void onSignal_addGraphicsItem(modelStateInfo&); void onSignal_addGraphicsItem(modelStateInfo&);
void onSignal_Generate(); //由基模组态生成工程模组态 void onSignal_Generate(); //由基模组态生成工程模组态
private: private:
Ui::drawingPanel *ui;
DesignerView* m_pGraphicsView;
DesignerScene* m_pGraphicsScene;
SelectorManager* m_pSelectorManager;
StatusBar* m_pStatusBar;
FixedPortsModel* _pModel;
DiagramMode _mode;
QString _name;
PowerEntity* _pEntity; //组态图拓扑对象
ProjectDiagramNameInput* m_pDiagramNameInputer; ProjectDiagramNameInput* m_pDiagramNameInputer;
}; };

View File

@ -13,6 +13,7 @@ class EditPanel;
class DiagramEditorWizard; class DiagramEditorWizard;
class DiagramCavas; class DiagramCavas;
class EditBaseItem; class EditBaseItem;
class DiagramEditorBaseBlock;
int const g_nHorizontalBlockSpacing = 100; //间隔横向间距 int const g_nHorizontalBlockSpacing = 100; //间隔横向间距
@ -30,8 +31,8 @@ public:
void generateTempTrans(int nType,DiagramEditorTransformerBlock* block = nullptr); //0高压侧1中压侧2低压侧3整个变压器 void generateTempTrans(int nType,DiagramEditorTransformerBlock* block = nullptr); //0高压侧1中压侧2低压侧3整个变压器
void connectTransToNeutral(DiagramEditorTransformerBlock* block); //连接变压器与中性点设备 void connectTransToNeutral(DiagramEditorTransformerBlock* block); //连接变压器与中性点设备
void linkTransItem(GraphicsBaseModelItem*,QStandardItemModel*); //连接中性点与设备点 void linkTransItem(GraphicsBaseModelItem*,QStandardItemModel*); //连接中性点与设备点
GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode); //生成设备 uid,分类(设备、逻辑点),类型,旋转,模式(0局部1整体) GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode,QString sBay = QString()); //生成设备 uid,分类(设备、逻辑点),类型,旋转,模式(0局部1整体)
ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode); //生成连线 mode 0局部1整体 ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode,QString sBay = QString()); //生成连线 mode 0局部1整体
void clearCurPreview(); void clearCurPreview();
void setPanel(EditPanel* p) {_pPanel = p;} void setPanel(EditPanel* p) {_pPanel = p;}
EditPanel* getPanel(){return _pPanel;} EditPanel* getPanel(){return _pPanel;}
@ -57,8 +58,8 @@ public:
QStandardItem* getNameItem(const QString&,int nFrom = 0); //获取返回当前设备模型中的name项 nFrom,0间隔1变压器 QStandardItem* getNameItem(const QString&,int nFrom = 0); //获取返回当前设备模型中的name项 nFrom,0间隔1变压器
void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器 void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器
QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0),DiagramEditorBaseBlock* pParent = nullptr); //根据data生成item parent:生成的对象添加到parent下(非拓扑计算)
QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置 QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0,DiagramEditorBaseBlock* pParent = nullptr); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map
void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用) void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用)
@ -68,9 +69,10 @@ public:
void setWizardInfo(const QByteArray&); //二进制设置wizard void setWizardInfo(const QByteArray&); //二进制设置wizard
private: private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据) void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>,DiagramEditorBaseBlock* pParent = nullptr); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
QByteArray serializeWizardData(const DiagramEditorProjectInfo &data); //序列化eidtor向导设置数据 QByteArray serializeWizardData(const DiagramEditorProjectInfo &data); //序列化eidtor向导设置数据
DiagramEditorProjectInfo deserializeWizardData(const QByteArray &byteArray); //反序列化eidtor向导设置 DiagramEditorProjectInfo deserializeWizardData(const QByteArray &byteArray); //反序列化eidtor向导设置
DiagramEditorBaseBlock* getBlockDataByName(QString,EditorItemType); //通过名称类型获取block的data
private: private:
QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象 QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象
QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象 QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象
@ -81,5 +83,6 @@ private:
EditBaseScene* _pCurPreviewScene; //当前预览scene EditBaseScene* _pCurPreviewScene; //当前预览scene
EditPanel* _pPanel; //主界面 EditPanel* _pPanel; //主界面
QPointer<DiagramEditorWizard> _pWizard; //向导界面数据 QPointer<DiagramEditorWizard> _pWizard; //向导界面数据
int _cableCount; //导线计数
}; };

View File

@ -8,6 +8,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QTimer> #include <QTimer>
class BaseDrawingPanel;
class DrawingPanel; class DrawingPanel;
class GraphicsBaseItem; class GraphicsBaseItem;
class GraphicsProjectModelItem; class GraphicsProjectModelItem;
@ -43,17 +44,17 @@ public:
QVector<ModelProperty*> allConnectionProperty(); QVector<ModelProperty*> allConnectionProperty();
QMap<QUuid,GraphicsProjectModelItem*>& allItems(); QMap<QUuid,GraphicsProjectModelItem*>& allItems();
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*); bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
void addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0); QString addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0);
GraphicsProjectModelItem* nodeItem(QUuid uuid); GraphicsProjectModelItem* nodeItem(QUuid uuid);
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名) BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名)
void loadNodeDataFromDataBase(); //从数据库加载数据 void loadNodeDataFromDataBase(); //从数据库加载数据
void addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort); QString addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort);
void deleteNodeItem(GraphicsProjectModelItem*); void deleteNodeItem(GraphicsProjectModelItem*);
//QJsonObject saveNode(QUuid const) const; //QJsonObject saveNode(QUuid const) const;
void saveNode(int nPageId); void saveNode(int nPageId);
void setScene(DesignerScene* p){_scene = p;} void setScene(DesignerScene* p){_scene = p;}
DesignerScene* getScene() {return _scene;} DesignerScene* getScene() {return _scene;}
void setTopWidget(DrawingPanel* p) {_widget = p;} void setTopWidget(BaseDrawingPanel* p) {_widget = p;}
QWidget* getTopWidget(); QWidget* getTopWidget();
QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置 QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置
ElectricConnectLineItem* getLineItemById(const QString& terminalId); ElectricConnectLineItem* getLineItemById(const QString& terminalId);
@ -95,8 +96,14 @@ public:
void addTestData(); //生成测试基模 void addTestData(); //生成测试基模
QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签> QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签>
QList<QUuid> turnJsonArrToList(QJsonObject obj,QString sInner,QString sOut); QList<QUuid> turnJsonArrToList(QJsonObject obj,QString sInner,QString sOut);
/*************************监控(运行时)**************************/
void generateMonitor(QString,QList<QPair<QString,QUuid>>); //生成监控 (监控名,选中的设备列表)
Q_SIGNALS: Q_SIGNALS:
void activatePage(const QString&); //激活当前model所在page void activatePage(const QString&); //激活当前model所在page
void updateCurrentItems(QList<monitorRelationItem>,bool); //更新当前组态元件列表 <名称,uid>
void itemSelected(QList<QPair<QString,QUuid>>); //发送选中的元件
void monitorCreated(QString,QPair<QString,QUuid>); //监控创建信号 <工程page,<监控page,page_uid>>
void monitorItems(QList<QPair<QString,QUuid>>); //发送创建成功的Items
public: public:
void setPageName(QString s) {_pageName = s;} //设置表名称 void setPageName(QString s) {_pageName = s;} //设置表名称
QString pageName() const {return _pageName;} QString pageName() const {return _pageName;}
@ -113,6 +120,7 @@ private:
void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
QString removeSuffix(const QString& str); //移除最后一个下划线后的内容 (处理各种tag后缀) QString removeSuffix(const QString& str); //移除最后一个下划线后的内容 (处理各种tag后缀)
ModelProperty* getItemByUid(QList<GraphicsBaseItem*>,QUuid); //返回uid对应的data
private: private:
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象 QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
@ -123,7 +131,7 @@ private:
QString _pageName; QString _pageName;
DiagramCavas* _cavas; DiagramCavas* _cavas;
DesignerScene* _scene; DesignerScene* _scene;
DrawingPanel* _widget; //顶层widget BaseDrawingPanel* _widget; //顶层widget
HttpInterface* _Interface; HttpInterface* _Interface;
QTimer* _timer; QTimer* _timer;
PowerEntity* _pEntity; //拓扑实体 PowerEntity* _pEntity; //拓扑实体

View File

@ -9,7 +9,9 @@ class ElectricConnectLineItem : public GraphicsProjectModelItem
{ {
public: public:
ElectricConnectLineItem(QGraphicsItem *parent = 0); ElectricConnectLineItem(QGraphicsItem *parent = 0);
ElectricConnectLineItem(const ElectricConnectLineItem&); //暂不拷贝位置关系,由线自己计算
virtual ~ElectricConnectLineItem(); virtual ~ElectricConnectLineItem();
virtual ElectricConnectLineItem* clone() const override;
void setStartPoint(const QPointF& p); void setStartPoint(const QPointF& p);
void setEndPoint(const QPointF& p); void setEndPoint(const QPointF& p);
@ -23,6 +25,8 @@ protected:
virtual QPainterPath shape() const override; virtual QPainterPath shape() const override;
virtual QRectF boundingRect() const override; virtual QRectF boundingRect() const override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
private: private:
QPainterPath m_points; QPainterPath m_points;
QPainterPath m_pointsBoundingRect; //包裹点的矩形集合 QPainterPath m_pointsBoundingRect; //包裹点的矩形集合

View File

@ -3,19 +3,24 @@
#include "graphicsItem/graphicsBaseItem.h" #include "graphicsItem/graphicsBaseItem.h"
//node节点
class ElectricPortItem :public GraphicsProjectModelItem class ElectricPortItem :public GraphicsProjectModelItem
{ {
Q_OBJECT Q_OBJECT
public: public:
ElectricPortItem(QGraphicsItem *parent = 0); ElectricPortItem(QGraphicsItem *parent = 0);
ElectricPortItem(const ElectricPortItem&);
virtual ~ElectricPortItem(); virtual ~ElectricPortItem();
virtual ElectricPortItem* clone() const override;
void addPort(); void addPort();
public: public:
virtual void updateConnectData(); virtual void updateConnectData() override;
protected: protected:
virtual QRectF boundingRect() const override; virtual QRectF boundingRect() const override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -11,17 +11,19 @@ class ElectricSvgGroup :public GraphicsProjectModelGroup
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgGroup(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgGroup(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgGroup(const ElectricSvgGroup&);
virtual ~ElectricSvgGroup(); virtual ~ElectricSvgGroup();
void resize(int,double, double, const QPointF&); virtual ElectricSvgGroup* clone() const override;
void updateCoordinate(); void resize(int,double, double, const QPointF&) override;
void move(const QPointF&); void updateCoordinate() override;
void move(const QPointF&) override;
virtual void addSvgItem(ElectricSvgItem* item); virtual void addSvgItem(ElectricSvgItem* item);
virtual void updateMapSvg(QMap<QString,QByteArray> map); //工程模property不含图片额外存储 virtual void updateMapSvg(QMap<QString,QByteArray> map); //工程模property不含图片额外存储
protected: protected:
virtual QPainterPath shape(); virtual QPainterPath shape() override;
virtual void editShape(int, const QPointF&); virtual void editShape(int, const QPointF&) override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
protected: protected:
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QRectF m_lastBoudingRect; //记录上一时刻的boundingRect
QMap<QString,QByteArray> m_mapSvg; QMap<QString,QByteArray> m_mapSvg;

View File

@ -8,7 +8,9 @@ class ElectricSvgGroupCT :public ElectricSvgGroup
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgGroupCT(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgGroupCT(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgGroupCT(const ElectricSvgGroupCT&);
virtual ~ElectricSvgGroupCT(); virtual ~ElectricSvgGroupCT();
virtual ElectricSvgGroupCT* clone() const override;
virtual void setupFinish(QVariant) override; virtual void setupFinish(QVariant) override;
virtual void updateItem() override; virtual void updateItem() override;
void setCtType(int n){_nType = n;} void setCtType(int n){_nType = n;}

View File

@ -8,7 +8,9 @@ class ElectricSvgGroupPT :public ElectricSvgGroup
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgGroupPT(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgGroupPT(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgGroupPT(const ElectricSvgGroupPT&);
virtual ~ElectricSvgGroupPT(); virtual ~ElectricSvgGroupPT();
virtual ElectricSvgGroupPT* clone() const override;
virtual void setupFinish(QVariant) override; virtual void setupFinish(QVariant) override;
virtual void updateItem() override; virtual void updateItem() override;
virtual void updateLayout() override; virtual void updateLayout() override;

View File

@ -9,21 +9,24 @@ class ElectricSvgItem :public GraphicsProjectModelItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItem(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0); //genNewPort生成新接线点 ElectricSvgItem(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0); //genNewPort生成新接线点
ElectricSvgItem(const ElectricSvgItem&);
virtual ~ElectricSvgItem(); virtual ~ElectricSvgItem();
void resize(int,double, double, const QPointF&); virtual ElectricSvgItem* clone() const override;
void updateCoordinate(); void resize(int,double, double, const QPointF&) override;
void move(const QPointF&); void updateCoordinate() override;
void move(const QPointF&) override;
virtual void loadSvg(){}; virtual void loadSvg(){};
virtual void loadSvg(QByteArray); //第二种load直接加载图片 virtual void loadSvg(QByteArray); //第二种load直接加载图片
virtual void updateMapSvg(QMap<QString,QByteArray> map); virtual void updateMapSvg(QMap<QString,QByteArray> map);
protected: protected:
virtual QPainterPath shape(); virtual QPainterPath shape() override;
virtual void editShape(int, const QPointF&); virtual void editShape(int, const QPointF&) override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
protected: protected:
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QRectF m_lastBoudingRect; //记录上一时刻的boundingRect
QSvgRenderer* m_pRender; QSvgRenderer* m_pRender;
QMap<QString,QByteArray> m_mapSvg; QMap<QString,QByteArray> m_mapSvg;
QByteArray _tempSvg; //保存直接加载的svg数据
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItem2wTransformer :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItem2wTransformer(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItem2wTransformer(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItem2wTransformer(const ElectricSvgItem2wTransformer&);
virtual ~ElectricSvgItem2wTransformer(); virtual ~ElectricSvgItem2wTransformer();
virtual ElectricSvgItem2wTransformer* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItem3wTransformer :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItem3wTransformer(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItem3wTransformer(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItem3wTransformer(const ElectricSvgItem3wTransformer&);
virtual ~ElectricSvgItem3wTransformer(); virtual ~ElectricSvgItem3wTransformer();
virtual ElectricSvgItem3wTransformer* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,15 +9,18 @@ class ElectricSvgItemBus :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemBus(const QRect &rect, QGraphicsItem *parent = 0); ElectricSvgItemBus(const QRect &rect, QGraphicsItem *parent = 0);
ElectricSvgItemBus(const ElectricSvgItemBus&);
virtual ~ElectricSvgItemBus(); virtual ~ElectricSvgItemBus();
virtual ElectricSvgItemBus* clone() const override;
void addPort(); void addPort();
public: public:
virtual void updateConnectData(); virtual void updateConnectData() override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
virtual void updateHandles() override;
private: private:
virtual void updateHandles(); void initial();
}; };
#endif #endif

View File

@ -8,10 +8,14 @@ class ElectricSvgItemCT :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemCT(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemCT(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemCT(const ElectricSvgItemCT&);
virtual ~ElectricSvgItemCT(); virtual ~ElectricSvgItemCT();
virtual ElectricSvgItemCT* clone() const override;
void setItemType(int n){_itemType = n;} void setItemType(int n){_itemType = n;}
private:
void initial();
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
int _itemType = 0; //1三相0零相 int _itemType = 0; //1三相0零相
}; };

View File

@ -9,10 +9,14 @@ class ElectricSvgItemCableEnd :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemCableEnd(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemCableEnd(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemCableEnd(const ElectricSvgItemCableEnd&);
virtual ~ElectricSvgItemCableEnd(); virtual ~ElectricSvgItemCableEnd();
virtual ElectricSvgItemCableEnd* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItemCableTer :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemCableTer(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemCableTer(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemCableTer(const ElectricSvgItemCableTer&);
virtual ~ElectricSvgItemCableTer(); virtual ~ElectricSvgItemCableTer();
virtual ElectricSvgItemCableTer* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -8,10 +8,14 @@ class ElectricSvgItemDS :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemDS(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemDS(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemDS(const ElectricSvgItemDS&);
virtual ~ElectricSvgItemDS(); virtual ~ElectricSvgItemDS();
virtual ElectricSvgItemDS* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItemDTEDS:public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemDTEDS(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemDTEDS(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemDTEDS(const ElectricSvgItemDTEDS&);
virtual ~ElectricSvgItemDTEDS(); virtual ~ElectricSvgItemDTEDS();
virtual ElectricSvgItemDTEDS* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void inital();
}; };
#endif #endif

View File

@ -8,10 +8,14 @@ class ElectricSvgItemES :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemES(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemES(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemES(const ElectricSvgItemES&);
virtual ~ElectricSvgItemES(); virtual ~ElectricSvgItemES();
virtual ElectricSvgItemES* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -8,10 +8,14 @@ class ElectricSvgItemFES :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemFES(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemFES(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemFES(const ElectricSvgItemFES&);
virtual ~ElectricSvgItemFES(); virtual ~ElectricSvgItemFES();
virtual ElectricSvgItemFES* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItemLA :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemLA(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemLA(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemLA(const ElectricSvgItemLA&);
virtual ~ElectricSvgItemLA(); virtual ~ElectricSvgItemLA();
virtual ElectricSvgItemLA* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -9,10 +9,14 @@ class ElectricSvgItemPI :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemPI(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemPI(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemPI(const ElectricSvgItemPI&);
virtual ~ElectricSvgItemPI(); virtual ~ElectricSvgItemPI();
virtual ElectricSvgItemPI* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
}; };
#endif #endif

View File

@ -8,10 +8,14 @@ class ElectricSvgItemPT :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemPT(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgItemPT(const QRect &rect,QGraphicsItem *parent = 0);
ElectricSvgItemPT(const ElectricSvgItemPT&);
virtual ~ElectricSvgItemPT(); virtual ~ElectricSvgItemPT();
virtual ElectricSvgItemPT* clone() const override;
void setItemType(int n){_itemType = n;} void setItemType(int n){_itemType = n;}
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
private:
void initial();
int _itemType = 0; //1星型 0三角 int _itemType = 0; //1星型 0三角
}; };

View File

@ -10,14 +10,15 @@ class ElectricSvgItemRect :public ElectricSvgItem
Q_OBJECT Q_OBJECT
public: public:
ElectricSvgItemRect(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0); ElectricSvgItemRect(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0);
ElectricSvgItemRect(const ElectricSvgItemRect&);
virtual ~ElectricSvgItemRect(); virtual ~ElectricSvgItemRect();
virtual ElectricSvgItemRect* clone() const override;
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
virtual void updateHandles() override;
private: private:
virtual void updateHandles(); void initial();
double m_dRatioX;
}; };
#endif #endif

View File

@ -173,6 +173,7 @@ class GraphicsBaseItem :public QObject, public AbstractShapeType<QGraphicsItem>
GraphicsBaseItem(QGraphicsItem *parent); GraphicsBaseItem(QGraphicsItem *parent);
GraphicsBaseItem(const GraphicsBaseItem&); GraphicsBaseItem(const GraphicsBaseItem&);
virtual ~GraphicsBaseItem(); virtual ~GraphicsBaseItem();
virtual GraphicsBaseItem* clone() const = 0;
public: public:
virtual int addPort(PortState typ,QPointF vec,QString id = "",HandleType hType = T_lineInOut,PortPos pos = P_top,double dXPercent = 0,double dYPercent = 0); //新建,返回-1失败 virtual int addPort(PortState typ,QPointF vec,QString id = "",HandleType hType = T_lineInOut,PortPos pos = P_top,double dXPercent = 0,double dYPercent = 0); //新建,返回-1失败
@ -496,7 +497,7 @@ public:
GraphicsBaseModelItem(QGraphicsItem *parent); GraphicsBaseModelItem(QGraphicsItem *parent);
GraphicsBaseModelItem(const GraphicsBaseModelItem&); GraphicsBaseModelItem(const GraphicsBaseModelItem&);
virtual ~GraphicsBaseModelItem(); virtual ~GraphicsBaseModelItem();
virtual GraphicsBaseModelItem* clone() const = 0; virtual GraphicsBaseModelItem* clone() const override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
virtual void setMask(bool b){_stateMask = b;} virtual void setMask(bool b){_stateMask = b;}
virtual bool getMask(){return _stateMask;} virtual bool getMask(){return _stateMask;}
@ -527,13 +528,15 @@ class GraphicsProjectModelItem : public GraphicsBaseItem //工程模item
Q_OBJECT Q_OBJECT
public: public:
GraphicsProjectModelItem(QGraphicsItem *parent); GraphicsProjectModelItem(QGraphicsItem *parent);
GraphicsProjectModelItem(const GraphicsProjectModelItem&);
virtual ~GraphicsProjectModelItem(); virtual ~GraphicsProjectModelItem();
virtual GraphicsProjectModelItem* clone() const override;
virtual void createOperationCopy(); virtual void createOperationCopy() override;
virtual void removeOperationCopy(); virtual void removeOperationCopy() override;
virtual void moveOperationCopy(const QPointF&); virtual void moveOperationCopy(const QPointF&) override;
virtual void rotateOperationCopy(const double&); virtual void rotateOperationCopy(const double&) override;
virtual void syncRotationDataFromParent(const double&); virtual void syncRotationDataFromParent(const double&) override;
//多边形、线段等点选创建的对象需要的函数 //多边形、线段等点选创建的对象需要的函数
virtual void addPoint(const QPointF&) {} virtual void addPoint(const QPointF&) {}
virtual bool endDrawing() { return true; } virtual bool endDrawing() { return true; }
@ -552,7 +555,7 @@ public:
virtual void setLastPort(int n){_lastPort = n;} virtual void setLastPort(int n){_lastPort = n;}
virtual int getLastPort() const {return _lastPort;} virtual int getLastPort() const {return _lastPort;}
virtual void unbindProperty(); //断开图元与数据的绑定 virtual void unbindProperty(); //断开图元与数据的绑定
virtual void updateByProperty(); //使用data对象更新自己 virtual void updateByProperty() override; //使用data对象更新自己
virtual void updateConnectData(); //更新连接关系数据 virtual void updateConnectData(); //更新连接关系数据
virtual void setModelName(QString sName){_modelName = sName;} virtual void setModelName(QString sName){_modelName = sName;}
virtual QString getModelName() const {return _modelName;} virtual QString getModelName() const {return _modelName;}
@ -560,8 +563,9 @@ public:
virtual void updateItem(){}; //更新自身(如ct,pt) virtual void updateItem(){}; //更新自身(如ct,pt)
virtual void updateTerPos(); //ct,pt等item大小变动后重新计算端点位置 virtual void updateTerPos(); //ct,pt等item大小变动后重新计算端点位置
protected: protected:
virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&); virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&) override;
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*); virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*) override;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
signals: signals:
void ifExist(QUuid id,const QString&,int type,GraphicsProjectModelItem*); void ifExist(QUuid id,const QString&,int type,GraphicsProjectModelItem*);
public slots: public slots:
@ -579,7 +583,9 @@ class GraphicsProjectModelGroup : public GraphicsProjectModelItem //
Q_OBJECT Q_OBJECT
public: public:
GraphicsProjectModelGroup(QGraphicsItem *parent); GraphicsProjectModelGroup(QGraphicsItem *parent);
GraphicsProjectModelGroup(const GraphicsProjectModelGroup&);
virtual ~GraphicsProjectModelGroup(); virtual ~GraphicsProjectModelGroup();
virtual GraphicsProjectModelGroup* clone() const override;
virtual void addItem(GraphicsProjectModelItem* item); virtual void addItem(GraphicsProjectModelItem* item);
virtual void updateLayout(); virtual void updateLayout();
//virtual QRectF boundingRect() const override; //virtual QRectF boundingRect() const override;

View File

@ -0,0 +1,29 @@
#ifndef MONITORPANEL_H
#define MONITORPANEL_H
#include <QWidget>
#include "baseDrawingPanel.h"
class PowerEntity;
class MonitorPanel : public BaseDrawingPanel
{
Q_OBJECT
public:
MonitorPanel(PowerEntity* pEntity,QWidget *parent = nullptr,DiagramMode mode = DM_edit);
~MonitorPanel();
QJsonObject getMonitorInfo() const; //返回运行时的item信息
void loadNodes(QJsonObject obj) override; //加载图元信息
void saveNodes(int pageId) override; //保存到数据库
void setParentPage(const QString& str) {_sParentPage = str;}
QString getParentPage() {return _sParentPage;}
protected:
void closeEvent(QCloseEvent *closeEvent) override;
private:
QString _sParentPage; //派生自哪个工程
};
#endif

View File

@ -75,6 +75,7 @@ private:
QHash<QString, PowerEntity*> m_entities; // ID到实体映射 QHash<QString, PowerEntity*> m_entities; // ID到实体映射
QHash<QString, PowerEntity*> m_diagrams; // 组态图拓扑结构 QHash<QString, PowerEntity*> m_diagrams; // 组态图拓扑结构
QHash<QString, PowerEntity*> m_monitorDiagrams; //运行时组态
// 连接存储 // 连接存储
QHash<QString,PowerConnection*> m_connections; QHash<QString,PowerConnection*> m_connections;
QMultiHash<QString,PowerConnection*> m_connectionIndex; // 接线点ID到连接的映射 QMultiHash<QString,PowerConnection*> m_connectionIndex; // 接线点ID到连接的映射

View File

@ -0,0 +1,67 @@
#include <QJsonArray>
#include "baseDrawingPanel.h"
#include <QMessageBox>
#include <QCloseEvent>
#include <QVBoxLayout>
#include "designerView.h"
#include "graphicsDataModel/fixedPortsModel.h"
#include "graphicsItem/graphicsBaseItem.h"
#include "util/selectorManager.h"
#include "statusBar.h"
#include "powerEntity.h"
#include "topologyManager.h"
BaseDrawingPanel::BaseDrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode)
: QWidget(parent)
,_pModel(nullptr)
,_mode(mode)
,_pEntity(pEntity)
{
_pModel = new FixedPortsModel(pEntity);
_pModel->setTopWidget(this);
m_pSelectorManager = new SelectorManager(_pModel,this);
m_pGraphicsScene = new DesignerScene(_pModel,this);
//设置场景大小.前两个参数为scene的坐标远点设置到view的中心点后无论view如何缩放secne的坐标原点都不会动方便后续的位置计算
m_pGraphicsScene->setSceneRect(0,0, g_dGriaphicsScene_Width*4, g_dGriaphicsScene_Height*4);
m_pGraphicsScene->setGridVisible(true);
m_pGraphicsView = new DesignerView(this);
m_pGraphicsView->setScene(m_pGraphicsScene);
m_pGraphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
m_pGraphicsScene->setView(m_pGraphicsView);
_pModel->setScene(m_pGraphicsScene);
m_pStatusBar = new StatusBar(this);
connect(m_pGraphicsView,&DesignerView::onScaleChanged,m_pStatusBar,&StatusBar::onScaleLevelChanged);
QVBoxLayout *verticalLayout = new QVBoxLayout(this);
verticalLayout->addWidget(m_pGraphicsView);
verticalLayout->addWidget(m_pStatusBar);
verticalLayout->setContentsMargins(0, 0, 0, 0); // 左,上,右,下
verticalLayout->setSpacing(0); // 部件之间的间距
}
BaseDrawingPanel::~BaseDrawingPanel()
{
if(_pModel)
delete _pModel;
}
QGraphicsScene* BaseDrawingPanel::getQGraphicsScene()
{
return m_pGraphicsView->scene();
}
DesignerScene* BaseDrawingPanel::getDesignerScene()
{
return m_pGraphicsScene;
}
SelectorManager* BaseDrawingPanel::selectorManager() const
{
if(m_pSelectorManager)
return m_pSelectorManager;
else
return NULL;
}

View File

@ -31,7 +31,7 @@ DesignerScene::DesignerScene(FixedPortsModel* graphModel, QObject *parent)
{ {
m_bGridVisible = true; m_bGridVisible = true;
m_pView = nullptr; m_pView = nullptr;
m_pDrawingPanel = dynamic_cast<DrawingPanel*>(parent); m_pDrawingPanel = dynamic_cast<BaseDrawingPanel*>(parent);
} }
DesignerScene::~DesignerScene() DesignerScene::~DesignerScene()
{ {
@ -72,8 +72,6 @@ void DesignerScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent)
if(m_pDrawingPanel) if(m_pDrawingPanel)
{ {
DiagramMode mode = m_pDrawingPanel->getMode(); DiagramMode mode = m_pDrawingPanel->getMode();
if(mode == DM_run)
return;
m_pDrawingPanel->selectorManager()->getWorkingSelector()->mousePressEvent(mouseEvent, this,mode); m_pDrawingPanel->selectorManager()->getWorkingSelector()->mousePressEvent(mouseEvent, this,mode);
update(); update();
} }
@ -86,8 +84,6 @@ void DesignerScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent)
if(m_pDrawingPanel) if(m_pDrawingPanel)
{ {
DiagramMode mode = m_pDrawingPanel->getMode(); DiagramMode mode = m_pDrawingPanel->getMode();
if(mode == DM_run)
return;
m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseMoveEvent(mouseEvent, this,mode); m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseMoveEvent(mouseEvent, this,mode);
update(); update();
} }
@ -100,8 +96,6 @@ void DesignerScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* mouseEvent)
if(m_pDrawingPanel) if(m_pDrawingPanel)
{ {
DiagramMode mode = m_pDrawingPanel->getMode(); DiagramMode mode = m_pDrawingPanel->getMode();
if(mode == DM_run)
return;
m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseReleaseEvent(mouseEvent, this,mode); m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseReleaseEvent(mouseEvent, this,mode);
update(); update();
} }
@ -114,8 +108,6 @@ void DesignerScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent)
if(m_pDrawingPanel) if(m_pDrawingPanel)
{ {
DiagramMode mode = m_pDrawingPanel->getMode(); DiagramMode mode = m_pDrawingPanel->getMode();
if(mode == DM_run)
return;
m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseDoubleClickEvent(mouseEvent, this,mode); m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseDoubleClickEvent(mouseEvent, this,mode);
update(); update();
} }

View File

@ -3,18 +3,16 @@
#include <QJsonObject> #include <QJsonObject>
#include <QStandardItem> #include <QStandardItem>
#include "drawingPanel.h" #include "drawingPanel.h"
#include "monitorPanel.h"
#include "diagramCavas.h" #include "diagramCavas.h"
#include "dataBase.h" #include "dataBase.h"
#include "graphicsItem/graphicsBaseItem.h" #include "graphicsItem/graphicsBaseItem.h"
#include "topologyManager.h" #include "topologyManager.h"
#include "powerEntity.h" #include "powerEntity.h"
#include "diagramEditor/diagramEditorWizard.h"
#include "projectModelManager.h" #include "projectModelManager.h"
#include "baseProperty.h" #include "baseProperty.h"
#include "diagramEditor/editPanel.h" #include "diagramEditor/editPanel.h"
#include "graphicsDataModel/diagramEditorModel.h" #include "graphicsDataModel/diagramEditorModel.h"
#include "projectManager.h"
#include "designerView.h"
#include "basePropertyManager.h" #include "basePropertyManager.h"
#include <QLibrary> #include <QLibrary>
#include <QMetaMethod> #include <QMetaMethod>
@ -44,6 +42,13 @@ EditPanel* DiagramCavas::getEditPanel(QString sPage)
return nullptr; return nullptr;
} }
MonitorPanel* DiagramCavas::getMonitorPanel(QString sPage)
{
if(m_mapMonitorPanel.contains(sPage))
return m_mapMonitorPanel[sPage].first;
return nullptr;
}
void DiagramCavas::initial() void DiagramCavas::initial()
{ {
//todo:读取数据并初始化 //todo:读取数据并初始化
@ -54,25 +59,40 @@ void DiagramCavas::initial()
} }
} }
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode) void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent)
{ {
DrawingPanel* pPanel = new DrawingPanel(pItem,this,mode); if(mode == DM_baseModel || mode == DM_edit){
_curPage = pItem->name(); DrawingPanel* pPanel = new DrawingPanel(pItem,this,mode);
pPanel->setPageName(_curPage); _curPage = pItem->name();
pPanel->setWindowTitle(_curPage); pPanel->setPageName(_curPage);
//->setAttribute(Qt::WA_DeleteOnClose); pPanel->setWindowTitle(_curPage);
QMdiSubWindow* pSub = this->addSubWindow(pPanel); QMdiSubWindow* pSub = this->addSubWindow(pPanel);
m_mapDrawPanel.insert(_curPage,qMakePair(pPanel,pSub)); m_mapDrawPanel.insert(_curPage,qMakePair(pPanel,pSub));
pPanel->show(); pPanel->show();
FixedPortsModel* pModel = pPanel->getModelController(); FixedPortsModel* pModel = pPanel->getModelController();
pModel->setCavas(this); pModel->setCavas(this);
connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage); connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage);
connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); connect(pModel,&FixedPortsModel::updateCurrentItems,this,&DiagramCavas::onSignal_updateCurItems);
connect(pModel,&FixedPortsModel::itemSelected,this,&DiagramCavas::onSignal_selectedItems);
if(mode == DM_baseModel) connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete);
{ }
else if(mode == DM_run){
MonitorPanel* pPanel = new MonitorPanel(pItem,this,mode);
_curPage = pItem->name();
pPanel->setPageName(_curPage);
pPanel->setWindowTitle(_curPage);
pPanel->setParentPage(parent);
QMdiSubWindow* pSub = this->addSubWindow(pPanel);
m_mapMonitorPanel.insert(_curPage,qMakePair(pPanel,pSub));
pPanel->show();
FixedPortsModel* pModel = pPanel->getModelController();
pModel->setCavas(this);
connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage);
connect(pPanel,&MonitorPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete);
connect(pModel,&FixedPortsModel::monitorCreated,this,&DiagramCavas::onSignal_monitorCreated);
connect(pModel,&FixedPortsModel::monitorItems,this,&DiagramCavas::onSignal_monitorItemCreated);
} }
} }
@ -143,6 +163,7 @@ void DiagramCavas::onSignal_savePage()
DataBase::GetInstance()->updatePage(_curPage,_curPage,pPanel->getDiagramInfo()); DataBase::GetInstance()->updatePage(_curPage,_curPage,pPanel->getDiagramInfo());
int pageId = DataBase::GetInstance()->getPageIdByName(_curPage); int pageId = DataBase::GetInstance()->getPageIdByName(_curPage);
pPanel->saveNodes(pageId); pPanel->saveNodes(pageId);
} }
break; break;
case QMessageBox::Cancel: case QMessageBox::Cancel:
@ -189,6 +210,20 @@ void DiagramCavas::onSignal_loadEdit(const QString& sProject,QUuid uid)
} }
} }
void DiagramCavas::onSignal_loadMonitor(PowerEntity* p)
{
if(!m_mapMonitorPanel.contains(p->name()))
{
onSignal_addDrawingPanel(p,DiagramMode::DM_run);
//QJsonObject context = DataBase::GetInstance()->getPageContextByName(p->name());
//m_mapDrawPanel[p->name()].first->loadNodes(context);
}
else //已存在
{
m_mapMonitorPanel[p->name()].first->show();
}
}
void DiagramCavas::runPage(const QString sName) void DiagramCavas::runPage(const QString sName)
{ {
QString pageName = sName+QString("_run"); QString pageName = sName+QString("_run");
@ -229,10 +264,12 @@ void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
} }
else if(nType == 1){ else if(nType == 1){
DrawingPanel* pPanel = m_mapDrawPanel.take(name).first; DrawingPanel* pPanel = m_mapDrawPanel.take(name).first;
if(m_mapDrawPanel.isEmpty()) this->removeSubWindow(pPanel);
{ delete pPanel;
}
} else if(nType == 2){
MonitorPanel* pPanel = m_mapMonitorPanel.take(name).first;
if(m_mapMonitorPanel.isEmpty())
this->removeSubWindow(pPanel); this->removeSubWindow(pPanel);
delete pPanel; delete pPanel;
} }
@ -312,20 +349,25 @@ void DiagramCavas::onSignal_selectEntity(EntityInfo info)
} }
} }
void DiagramCavas::onSignal_createDiagram(DiagramInfo info) void DiagramCavas::onSignal_createDiagram(DiagramInfo info,DiagramMode mode)
{ {
PowerEntity* pEntity; PowerEntity* pEntity;
pEntity = TopologyManager::instance().findDiagram(info.id.toString()); ModelFunctionType type;
if(mode == DM_run)
type = ModelFunctionType::RuntimeModel;
else if(mode == DM_edit)
type = ModelFunctionType::ProjectModel;
pEntity = TopologyManager::instance().findDiagram(info.id.toString(),type);
if(!pEntity) //不存在创建 if(!pEntity) //不存在创建
{ {
pEntity = TopologyManager::instance().createDiagram(info.id.toString(),info.sName); pEntity = TopologyManager::instance().createDiagram(info.id.toString(),info.sName,type);
PowerEntity* pParent = TopologyManager::instance().findDiagram(info.parentId.toString()); /*PowerEntity* pParent = TopologyManager::instance().findDiagram(info.parentId.toString());
if(pParent) //构建父子关系 if(pParent) //构建父子关系
{ {
pParent->addChild(pEntity); pParent->addChild(pEntity);
} }*/
onSignal_addDrawingPanel(pEntity); onSignal_addDrawingPanel(pEntity,mode);
} }
} }
@ -451,7 +493,7 @@ void DiagramCavas::onSignal_addEditWizard(QString name,QUuid uid,bool val)
pPanel->showWizard(); pPanel->showWizard();
} }
void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay) void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBlock)
{ {
PowerEntity* pEntity; PowerEntity* pEntity;
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
@ -465,7 +507,7 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
TopologyManager::instance().cloneEditorToBase(); //拷贝拓扑结构 TopologyManager::instance().cloneEditorToBase(); //拷贝拓扑结构
auto pModel = pPanel->getModelController(); auto pModel = pPanel->getModelController();
if(pModel){ if(pModel){
pModel->onWizardFinished(mapItem,mapBay); pModel->onWizardFinished(mapItem,mapBlock);
} }
} }
} }
@ -505,4 +547,65 @@ void DiagramCavas::onSignl_openCurrentBay()
} }
} }
} }
/*********************monitor**************************/
void DiagramCavas::onSignal_updateCurItems(QList<monitorRelationItem> lst,bool refresh)
{
emit prepareUpdateItems(lst,refresh);
}
void DiagramCavas::onSignal_selectedItems(QList<QPair<QString,QUuid>> lst)
{
emit prepareSelectItems(lst);
}
void DiagramCavas::onSignal_generate(QString sPage,QList<QPair<QString,QUuid>> lst)
{
QWidget* pWindow= currentSubWindow()->widget();
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
if(pPanel){
pPanel->getModelController()->generateMonitor(sPage,lst);
}
}
void DiagramCavas::onSignal_monitorCreated(QString sProj,QPair<QString,QUuid> pair)
{
emit updateMonitorList(sProj,pair);
}
void DiagramCavas::onSignal_monitorItemCreated(QList<QPair<QString,QUuid>> lst)
{
emit createdMonitorItems(lst);
}
void DiagramCavas::onSignal_monitorSelected(DiagramInfo info)
{
PowerEntity* pEntity = TopologyManager::instance().findDiagram(info.id.toString(),ModelFunctionType::RuntimeModel);
if(pEntity)
{
onSignal_loadMonitor(pEntity);
}
}
void DiagramCavas::onSignal_saveMonitor(QList<QPair<QString,QUuid>> lst)
{
for(auto &pair:lst){
auto pMonitor = m_mapMonitorPanel.value(pair.first).first;
if(pMonitor){
if(DataBase::GetInstance()->getPageIdByName(pMonitor->getParentPage()) == -1){
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"请先保存工程模型"));
return;
}
}
}
for(auto& pair:lst){
auto pMonitor = m_mapMonitorPanel.value(pair.first).first;
if(pMonitor){
if(DataBase::GetInstance()->getMonitorIdByName(pair.first).isNull()) //不存在,创建
DataBase::GetInstance()->insertMonitor(pair.second,pair.first,pair.first,pMonitor->getParentPage(),pMonitor->getMonitorInfo());
else
DataBase::GetInstance()->updateMonitor(pair.first,pMonitor->getMonitorInfo());
}
}
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
}

View File

@ -37,6 +37,7 @@ DiagramEditorBlockInfo DiagramEditorBaseBlock::getBlockInfo()
info.nContainerLevel = nContainerLevel; info.nContainerLevel = nContainerLevel;
info.uid = uid; info.uid = uid;
info._lstCon = _lstCon; info._lstCon = _lstCon;
info._lstSub = _lstSub;
info.recSize = recSize; info.recSize = recSize;
info.sceneDelta = sceneDelta; info.sceneDelta = sceneDelta;
info.bEditState = bEditState; info.bEditState = bEditState;

View File

@ -399,8 +399,8 @@ void EditPanel::showConfirmDlg()
void EditPanel::generate() void EditPanel::generate()
{ {
auto pCavas = getCavas(); auto pCavas = getCavas();
QList<EditBaseItem*> pBays = getBlockItems(EditorItemType::bay); QList<EditBaseItem*> pBlocks = getBlockItems();
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBays); pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBlocks);
} }
void EditPanel::showWizard() void EditPanel::showWizard()

View File

@ -1,101 +1,30 @@
#include <QJsonArray> #include <QJsonArray>
#include "drawingPanel.h" #include "drawingPanel.h"
#include "ui_drawingPanel.h"
#include <QMessageBox> #include <QMessageBox>
#include <QCloseEvent> #include <QCloseEvent>
#include "designerView.h"
#include "graphicsDataModel/fixedPortsModel.h" #include "graphicsDataModel/fixedPortsModel.h"
#include "graphicsItem/graphicsBaseItem.h" #include "graphicsItem/graphicsBaseItem.h"
#include "util/selectorManager.h" #include "util/selectorManager.h"
#include "statusBar.h"
#include "dataBase.h" #include "dataBase.h"
#include "powerEntity.h" #include "powerEntity.h"
#include "topologyManager.h" #include "topologyManager.h"
#include "projectDiagramNameInput.h" #include "projectDiagramNameInput.h"
#include "baseProperty.h" #include "baseProperty.h"
#include "graphicsItem/electricBayItem.h" #include "graphicsItem/electricBayItem.h"
#include "statusBar.h"
DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode) DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode)
: QWidget(parent) : BaseDrawingPanel(pEntity,parent,mode)
, ui(new Ui::drawingPanel)
,_pModel(nullptr)
,_mode(mode)
,_pEntity(pEntity)
,m_pDiagramNameInputer(nullptr) ,m_pDiagramNameInputer(nullptr)
{ {
ui->setupUi(this);
_pModel = new FixedPortsModel(pEntity);
_pModel->setTopWidget(this);
if(mode == DM_edit || mode == DM_baseModel)
m_pSelectorManager = new SelectorManager(_pModel,this);
m_pGraphicsScene = new DesignerScene(_pModel,this);
//设置场景大小.前两个参数为scene的坐标远点设置到view的中心点后无论view如何缩放secne的坐标原点都不会动方便后续的位置计算
m_pGraphicsScene->setSceneRect(0,0, g_dGriaphicsScene_Width*4, g_dGriaphicsScene_Height*4);
m_pGraphicsScene->setGridVisible(true);
m_pGraphicsView = new DesignerView(this);
m_pGraphicsView->setScene(m_pGraphicsScene);
m_pGraphicsScene->setView(m_pGraphicsView);
ui->mainLayout->addWidget(m_pGraphicsView);
_pModel->setScene(m_pGraphicsScene);
m_pStatusBar = new StatusBar(this);
if(mode == DM_edit) if(mode == DM_edit)
m_pStatusBar->setButtonVisible(false); m_pStatusBar->setButtonVisible(false);
ui->mainLayout->addWidget(m_pStatusBar);
connect(m_pGraphicsView,&DesignerView::onScaleChanged,m_pStatusBar,&StatusBar::onScaleLevelChanged);
connect(m_pStatusBar,&StatusBar::generateDiagram,this,&DrawingPanel::onSignal_Generate); connect(m_pStatusBar,&StatusBar::generateDiagram,this,&DrawingPanel::onSignal_Generate);
} }
DrawingPanel::~DrawingPanel() DrawingPanel::~DrawingPanel()
{ {
delete ui;
if(_pModel)
delete _pModel;
}
QGraphicsScene* DrawingPanel::getQGraphicsScene()
{
return m_pGraphicsView->scene();
}
DesignerScene* DrawingPanel::getDesignerScene()
{
return m_pGraphicsScene;
}
void DrawingPanel::grahpicsViewZoomIn()
{
m_pGraphicsView->zoomIn();
}
void DrawingPanel::grahpicsViewZoomOut()
{
m_pGraphicsView->zoomOut();
}
void DrawingPanel::grahpicsViewZoomFit()
{
m_pGraphicsView->zoomFit();
}
GraphicsItemGroup* DrawingPanel::createItemGroup()
{
return m_pGraphicsScene->createGroup();
}
void DrawingPanel::destroyItemGroup()
{
m_pGraphicsScene->destroyGroup();
}
SelectorManager* DrawingPanel::selectorManager() const
{
if(m_pSelectorManager)
return m_pSelectorManager;
else
return NULL;
} }
void DrawingPanel::closeEvent(QCloseEvent *closeEvent) void DrawingPanel::closeEvent(QCloseEvent *closeEvent)
@ -153,10 +82,6 @@ void DrawingPanel::closeEvent(QCloseEvent *closeEvent)
} }
emit panelDelete(_name,1); emit panelDelete(_name,1);
} }
else if(getMode() == DM_baseModel)
{
}
} }
void DrawingPanel::onSignal_addGraphicsItem(modelStateInfo& info) void DrawingPanel::onSignal_addGraphicsItem(modelStateInfo& info)
@ -233,6 +158,7 @@ void DrawingPanel::loadNodes(QJsonObject obj)
{ {
QJsonArray nodesJsonArray = obj["nodes"].toArray(); QJsonArray nodesJsonArray = obj["nodes"].toArray();
QList<QPair<QString,QUuid>> lst;
for (QJsonValueRef nodeJson : nodesJsonArray) for (QJsonValueRef nodeJson : nodesJsonArray)
{ {
QJsonObject node = nodeJson.toObject(); QJsonObject node = nodeJson.toObject();
@ -246,7 +172,10 @@ void DrawingPanel::loadNodes(QJsonObject obj)
//componentInfo info =DataBase::GetInstance()->getComponentInfoByUuid(uuid); //componentInfo info =DataBase::GetInstance()->getComponentInfoByUuid(uuid);
if(_pModel) if(_pModel)
{ {
_pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight,dRotate); QString sName = _pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight,dRotate);
if(sName != "err"){
lst.append(qMakePair(sName,QUuid(uuid)));
}
} }
} }
@ -268,7 +197,10 @@ void DrawingPanel::loadNodes(QJsonObject obj)
//todo:从拓扑结构中查找port的id //todo:从拓扑结构中查找port的id
if(_pModel) if(_pModel)
{ {
_pModel->addConnectLline(id,QUuid(srcItemId),QUuid(destItemId),srcPortId,destPortId); QString sName = _pModel->addConnectLline(id,QUuid(srcItemId),QUuid(destItemId),srcPortId,destPortId);
if(sName != "err"){
lst.append(qMakePair(sName,QUuid(id)));
}
} }
} }
else else
@ -277,6 +209,9 @@ void DrawingPanel::loadNodes(QJsonObject obj)
} }
} }
//if(_pModel)
//emit _pModel->updateCurrentItems(lst);
QJsonArray bayArr = obj["bays"].toArray(); QJsonArray bayArr = obj["bays"].toArray();
for(QJsonValueRef bayJson:bayArr) for(QJsonValueRef bayJson:bayArr)
{ {

View File

@ -29,6 +29,7 @@ DiagramEditorModel::DiagramEditorModel()
,_pCurPreviewScene(nullptr) ,_pCurPreviewScene(nullptr)
,_pCurTransComponent(nullptr) ,_pCurTransComponent(nullptr)
,_pPanel(nullptr) ,_pPanel(nullptr)
,_cableCount(0)
{ {
} }
@ -144,7 +145,7 @@ QRectF DiagramEditorModel::generateTempBay()
return itemsRect; return itemsRect;
} }
GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode) GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode,QString sBay)
{ {
GraphicsBaseModelItem* pItem = nullptr; GraphicsBaseModelItem* pItem = nullptr;
int componentType = -1; //对应的componentType int componentType = -1; //对应的componentType
@ -299,11 +300,11 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s
pItem->setEntity(pEntityData); pItem->setEntity(pEntityData);
DiagramEditorItemProperty* pData = nullptr; DiagramEditorItemProperty* pData = nullptr;
if(nCategory == 1){ if(nCategory == 1){
pData = addPreviewData(uid,0,sName,"node","",mode); pData = addPreviewData(uid,0,sName,"node",sBay,mode);
pData->setGraphicsType(pItem->getItemType()); pData->setGraphicsType(pItem->getItemType());
} }
else if(nCategory == 0){ //设备 else if(nCategory == 0){ //设备
pData = addPreviewData(uid,componentType,sName,DataBase::GetInstance()->ModelType()[nType].modelType,"",mode); pData = addPreviewData(uid,componentType,sName,DataBase::GetInstance()->ModelType()[nType].modelType,sBay,mode);
pData->setGraphicsType(pItem->getItemType()); pData->setGraphicsType(pItem->getItemType());
} }
if(pData) if(pData)
@ -319,12 +320,12 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s
return pItem; return pItem;
} }
ElectricBaseModelLineItem* DiagramEditorModel::generateLine(QUuid uid,QString sName,int mode) ElectricBaseModelLineItem* DiagramEditorModel::generateLine(QUuid uid,QString sName,int mode,QString sBay)
{ {
ElectricBaseModelLineItem* pLine = new ElectricBaseModelLineItem(); ElectricBaseModelLineItem* pLine = new ElectricBaseModelLineItem();
pLine->setItemId(uid); pLine->setItemId(uid);
pLine->setItemType(GIT_baseLine); pLine->setItemType(GIT_baseLine);
DiagramEditorItemProperty* pData = addPreviewData(uid,8,sName,DataBase::GetInstance()->ModelType()[4].modelType,"",mode); DiagramEditorItemProperty* pData = addPreviewData(uid,8,sName,DataBase::GetInstance()->ModelType()[4].modelType,sBay,mode);
pData->setGraphicsType(GIT_baseLine); pData->setGraphicsType(GIT_baseLine);
if(pData) if(pData)
{ {
@ -439,10 +440,11 @@ void DiagramEditorModel::linkTransItem(GraphicsBaseModelItem* pTrans,QStandardIt
nPos = 1; nPos = 1;
else if(sBindObj == "低压绕组中性点") else if(sBindObj == "低压绕组中性点")
nPos = 2; nPos = 2;
QString strCable = "cable_"+QString::number(_cableCount++);
auto pLineData = TopologyManager::instance().ifConnection(uid1.toString(),uid2.toString()); //判断两个item是否有连接 auto pLineData = TopologyManager::instance().ifConnection(uid1.toString(),uid2.toString()); //判断两个item是否有连接
if(pLineData != nullptr){ if(pLineData != nullptr){
if(!_tempItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制 if(!_tempItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制
auto pLine = generateLine(QUuid(pLineData->id()),"",0); //重新绘制 auto pLine = generateLine(QUuid(pLineData->id()),strCable,0); //重新绘制
if(pLine) if(pLine)
establishConnection(pItem,pTrans,pLine,ModelFunctionType::BlockEditorModel,1,nPos); establishConnection(pItem,pTrans,pLine,ModelFunctionType::BlockEditorModel,1,nPos);
} }
@ -450,7 +452,7 @@ void DiagramEditorModel::linkTransItem(GraphicsBaseModelItem* pTrans,QStandardIt
} }
} }
else{ //connectdata不存在新建 else{ //connectdata不存在新建
auto pLine = generateLine(QUuid::createUuid(),"",0); auto pLine = generateLine(QUuid::createUuid(),strCable,0);
if(pLine) if(pLine)
establishConnection(pItem,pTrans,pLine,ModelFunctionType::BlockEditorModel,1,nPos); establishConnection(pItem,pTrans,pLine,ModelFunctionType::BlockEditorModel,1,nPos);
} }
@ -514,7 +516,7 @@ void DiagramEditorModel::generatePreview()
QPointF centerLocal = rect.center(); QPointF centerLocal = rect.center();
// 转换为场景坐标系 // 转换为场景坐标系
QPointF centerScene = item->mapToScene(centerLocal); QPointF centerScene = item->mapToScene(centerLocal);
QList<DiagramEditorComponentInfo> lstCompo = generateItemByInfo(mapRoute,mapCompo,centerScene); //返回与外部连接的compo QList<DiagramEditorComponentInfo> lstCompo = generateItemByInfo(mapRoute,mapCompo,centerScene,pBay); //返回与外部连接的compo
if(!baysCompo.contains(sBay)) if(!baysCompo.contains(sBay))
baysCompo.insert(sBay,lstCompo); baysCompo.insert(sBay,lstCompo);
} }
@ -536,6 +538,7 @@ void DiagramEditorModel::generatePreview()
else else
nType = 16; nType = 16;
auto pItem = generateComponent(uid,name,0,nType,pos,0,1); auto pItem = generateComponent(uid,name,0,nType,pos,0,1);
auto pro = pItem->getProperty();
QRectF rect = item->boundingRect(); QRectF rect = item->boundingRect();
// 计算中心点(本地坐标系) // 计算中心点(本地坐标系)
@ -548,7 +551,7 @@ void DiagramEditorModel::generatePreview()
for(auto &neutral:transInfo.mapNeutral){ for(auto &neutral:transInfo.mapNeutral){
QPointF pDelta = neutral.delPoint; QPointF pDelta = neutral.delPoint;
int nT = neutral.nType; int nT = neutral.nType;
QList<DiagramEditorComponentInfo> lstCompo = generateItemByInfo(neutral.mapRoute,transInfo.mapComponent,centerScene+pDelta); QList<DiagramEditorComponentInfo> lstCompo = generateItemByInfo(neutral.mapRoute,transInfo.mapComponent,centerScene+pDelta,pTrans);
if(!neutralInfo.contains(nT)) if(!neutralInfo.contains(nT))
neutralInfo.insert(nT,lstCompo); neutralInfo.insert(nT,lstCompo);
} }
@ -560,7 +563,7 @@ void DiagramEditorModel::generatePreview()
} }
for(auto iter = baysCompo.begin();iter != baysCompo.end();++iter){ for(auto iter = baysCompo.begin();iter != baysCompo.end();++iter){
QMultiMap<int,QUuid> mapId = generateOutConnection(iter.value(),2); //QMultiMap<int,QUuid> mapId = generateOutConnection(iter.value(),2);
QList<QUuid> lstFrom; //处理进出链接 QList<QUuid> lstFrom; //处理进出链接
QList<QUuid> lstTo; QList<QUuid> lstTo;
@ -571,6 +574,7 @@ void DiagramEditorModel::generatePreview()
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data()); DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
if(pBay){ if(pBay){
if(pBay->getName() == iter.key()){ //相同间隔 if(pBay->getName() == iter.key()){ //相同间隔
QMultiMap<int,QUuid> mapId = generateOutConnection(iter.value(),2,0,pBay); //type为2时pos不启用
switch (pBay->getBayType()) { switch (pBay->getBayType()) {
case BayType::busSectionBay:{ case BayType::busSectionBay:{
QList<QUuid> values = mapId.values(1); QList<QUuid> values = mapId.values(1);
@ -641,9 +645,19 @@ void DiagramEditorModel::generatePreview()
} }
} }
for(auto &map:transCompo){ for(auto iter = transCompo.begin();iter != transCompo.end();++iter){
for(auto it = map.begin(); it != map.end();++it){ for(auto it = iter.value().begin(); it != iter.value().end();++it){ //遍历每侧中性点
generateOutConnection(it.value(),1,it.key()); for(auto item:lst){
if(item->getType() == EditorItemType::trans){
auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorTransformerBlock* pTrans = dynamic_cast<DiagramEditorTransformerBlock*>(p.data());
if(pTrans){
if(pTrans->getName() == iter.key()){
generateOutConnection(it.value(),1,it.key(),pTrans);
}
}
}
}
} }
} }
} }
@ -1011,10 +1025,11 @@ void DiagramEditorModel::generateItemByModel(QStandardItemModel* pModel,int nFro
if(_tempItem.contains(uid1) && _tempItem.contains(uid2)){ if(_tempItem.contains(uid1) && _tempItem.contains(uid2)){
GraphicsBaseModelItem* p1 = _tempItem.value(uid1); GraphicsBaseModelItem* p1 = _tempItem.value(uid1);
GraphicsBaseModelItem* p2 = _tempItem.value(uid2); GraphicsBaseModelItem* p2 = _tempItem.value(uid2);
QString strCable = "cable_"+QString::number(_cableCount++);
auto pLineData = TopologyManager::instance().ifConnection(uid1.toString(),uid2.toString(),ModelFunctionType::BlockEditorModel); //判断两个item是否有连接 auto pLineData = TopologyManager::instance().ifConnection(uid1.toString(),uid2.toString(),ModelFunctionType::BlockEditorModel); //判断两个item是否有连接
if(pLineData != nullptr){ if(pLineData != nullptr){
if(!_tempItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制 if(!_tempItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制
auto pLine = generateLine(QUuid(pLineData->id()),"",0); //重新绘制 auto pLine = generateLine(QUuid(pLineData->id()),strCable,0); //重新绘制
if(pLine) if(pLine)
establishConnection(p1,p2,pLine,ModelFunctionType::BlockEditorModel); establishConnection(p1,p2,pLine,ModelFunctionType::BlockEditorModel);
} }
@ -1022,7 +1037,7 @@ void DiagramEditorModel::generateItemByModel(QStandardItemModel* pModel,int nFro
} }
} }
else{ //connectdata不存在新建 else{ //connectdata不存在新建
auto pLine = generateLine(QUuid::createUuid(),"",0); auto pLine = generateLine(QUuid::createUuid(),strCable,0);
if(pLine) if(pLine)
establishConnection(p1,p2,pLine,ModelFunctionType::BlockEditorModel); establishConnection(p1,p2,pLine,ModelFunctionType::BlockEditorModel);
} }
@ -1033,7 +1048,7 @@ void DiagramEditorModel::generateItemByModel(QStandardItemModel* pModel,int nFro
} }
} }
QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta) QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta,DiagramEditorBaseBlock* pParent)
{ {
QList<DiagramEditorComponentInfo> lstBind; //连接外部对象的component QList<DiagramEditorComponentInfo> lstBind; //连接外部对象的component
QString sMain; QString sMain;
@ -1044,15 +1059,19 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName); auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid)) if(_previewItem.contains(info.uid))
continue; continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1); generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent->getName());
if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无 if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无
if(!lstBind.contains(info)) if(!lstBind.contains(info))
lstBind.append(info); lstBind.append(info);
} }
if(pParent != nullptr){ //添加到block中的子item列表
pParent->addSubList(qMakePair(0,info.uid));
}
} }
if(route.lstCompo.size() > 1){ if(route.lstCompo.size() > 1){
bulidAndLinkComponent(route.lstCompo,mapCompo); bulidAndLinkComponent(route.lstCompo,mapCompo,pParent); //添加线到subitem
} }
} }
} }
@ -1065,7 +1084,7 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName); auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid)) if(_previewItem.contains(info.uid))
continue; continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1); generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent->getName());
if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无 if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无
if(!lstBind.contains(info)) if(!lstBind.contains(info))
lstBind.append(info); lstBind.append(info);
@ -1076,7 +1095,7 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName); auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid)) if(_previewItem.contains(info.uid))
continue; continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1); generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent->getName());
if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无 if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"")){ //非空且不是无
if(!lstBind.contains(info)) if(!lstBind.contains(info))
lstBind.append(info); lstBind.append(info);
@ -1084,18 +1103,18 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
} }
if(route.lstOrder.size() > 1){ if(route.lstOrder.size() > 1){
bulidAndLinkComponent(route.lstOrder,mapCompo); bulidAndLinkComponent(route.lstOrder,mapCompo,pParent);
} }
if(route.lstReverse.size() > 1){ if(route.lstReverse.size() > 1){
bulidAndLinkComponent(route.lstReverse,mapCompo); bulidAndLinkComponent(route.lstReverse,mapCompo,pParent);
} }
} }
return lstBind; return lstBind;
} }
QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos) QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos,DiagramEditorBaseBlock* pParent)
{ {
QMultiMap<int,QUuid> bindId; //返回关联的对象id<类型id> QMultiMap<int,QUuid> bindId; //返回关联的对象id<类型id>
for(auto& compo:lstBind){ //遍历关联外部的item进行连线 for(auto& compo:lstBind){ //遍历关联外部的item进行连线
@ -1107,12 +1126,20 @@ QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEdit
QUuid uId = pro->uuid(); QUuid uId = pro->uuid();
int nType = pro->type(); int nType = pro->type();
if(sName == compo.sBindObj){ if(sName == compo.sBindObj){
auto pBus = getBlockDataByName(sName,EditorItemType::bus);
if(pParent && pBus){ //直连到母线的一般是间隔添加到busblock的sublist中
pBus->addSubList(qMakePair(1,pParent->getId()));
}
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid); GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem; GraphicsBaseModelItem* pTarget = pItem;
QString strCable = "cable_"+QString::number(_cableCount++);
QUuid lineId;
auto pLineData = TopologyManager::instance().ifConnection(pSrc->itemId().toString(),pTarget->itemId().toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接 auto pLineData = TopologyManager::instance().ifConnection(pSrc->itemId().toString(),pTarget->itemId().toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接
if(pLineData != nullptr){ if(pLineData != nullptr){
if(!_previewItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制 lineId = QUuid(pLineData->id());
auto pLine = generateLine(QUuid(pLineData->id()),"",1); //重新绘制 if(!_previewItem.contains(lineId)){ //connectdata已存在item未绘制
auto pLine = generateLine(lineId,strCable,1,pParent->getName()); //重新绘制
if(pLine) if(pLine)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel);
} }
@ -1120,11 +1147,15 @@ QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEdit
} }
} }
else{ //connectdata不存在新建 else{ //connectdata不存在新建
auto pLine = generateLine(QUuid::createUuid(),"",1); lineId = QUuid::createUuid();
auto pLine = generateLine(lineId,strCable,1,pParent->getName());
if(pLine) if(pLine)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel);
} }
bindId.insert(nType,uId); bindId.insert(nType,uId);
if(pParent){
pParent->addSubList(qMakePair(0,lineId));
}
} }
} }
} }
@ -1139,10 +1170,13 @@ QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEdit
if(sName == compo.sBindParent){ //判断变压器名 if(sName == compo.sBindParent){ //判断变压器名
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid); GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem; GraphicsBaseModelItem* pTarget = pItem;
QString strCable = "cable_"+QString::number(_cableCount++);
QUuid lineId;
auto pLineData = TopologyManager::instance().ifConnection(pSrc->itemId().toString(),pTarget->itemId().toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接 auto pLineData = TopologyManager::instance().ifConnection(pSrc->itemId().toString(),pTarget->itemId().toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接
if(pLineData != nullptr){ if(pLineData != nullptr){
if(!_previewItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制 lineId = QUuid(pLineData->id());
auto pLine = generateLine(QUuid(pLineData->id()),"",1); //重新绘制 if(!_previewItem.contains(lineId)){ //connectdata已存在item未绘制
auto pLine = generateLine(lineId,strCable,1); //重新绘制
if(pLine){ if(pLine){
if(nTypeTransCon == 2) if(nTypeTransCon == 2)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,2,compo.nBindPara); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,2,compo.nBindPara);
@ -1154,7 +1188,8 @@ QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEdit
} }
} }
else{ //connectdata不存在新建 else{ //connectdata不存在新建
auto pLine = generateLine(QUuid::createUuid(),"",1); lineId = QUuid::createUuid();
auto pLine = generateLine(lineId,strCable,1);
if(pLine){ if(pLine){
if(nTypeTransCon == 2) if(nTypeTransCon == 2)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,2,compo.nBindPara); establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,2,compo.nBindPara);
@ -1163,6 +1198,9 @@ QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEdit
} }
} }
bindId.insert(nType,uId); bindId.insert(nType,uId);
if(pParent){
pParent->addSubList(qMakePair(0,lineId));
}
} }
} }
} }
@ -2253,7 +2291,7 @@ QRectF DiagramEditorModel::updateTarget(QMap<QString,DiagramEditorRouteInfo>& da
return recBounding; return recBounding;
} }
void DiagramEditorModel::bulidAndLinkComponent(QList<DiagramEditorComponentInfo> lst,QMap<QString,DiagramEditorComponentInfo> components) void DiagramEditorModel::bulidAndLinkComponent(QList<DiagramEditorComponentInfo> lst,QMap<QString,DiagramEditorComponentInfo> components,DiagramEditorBaseBlock* pParent)
{ {
for(int i = 0;i < lst.size()-1;++i){ for(int i = 0;i < lst.size()-1;++i){
auto item1 = lst[i]; auto item1 = lst[i];
@ -2263,12 +2301,15 @@ void DiagramEditorModel::bulidAndLinkComponent(QList<DiagramEditorComponentInfo>
if(_previewItem.contains(info1.uid) && _previewItem.contains(info2.uid)){ if(_previewItem.contains(info1.uid) && _previewItem.contains(info2.uid)){
GraphicsBaseModelItem* p1 = _previewItem.value(info1.uid); GraphicsBaseModelItem* p1 = _previewItem.value(info1.uid);
GraphicsBaseModelItem* p2 = _previewItem.value(info2.uid); GraphicsBaseModelItem* p2 = _previewItem.value(info2.uid);
QString strCable = "cable_"+QString::number(_cableCount++);
QUuid lineId;
auto pLineData = TopologyManager::instance().ifConnection(info1.uid.toString(),info2.uid.toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接 auto pLineData = TopologyManager::instance().ifConnection(info1.uid.toString(),info2.uid.toString(),ModelFunctionType::EditorModel); //判断两个item是否有连接
if(pLineData != nullptr){ if(pLineData != nullptr){
if(_previewItem.contains(QUuid(pLineData->id()))) //已绘制 lineId = QUuid(pLineData->id());
if(_previewItem.contains(lineId)) //已绘制
continue; continue;
if(!_previewItem.contains(QUuid(pLineData->id()))){ //connectdata已存在item未绘制 if(!_previewItem.contains(lineId)){ //connectdata已存在item未绘制
auto pLine = generateLine(QUuid(pLineData->id()),"",1); //重新绘制 auto pLine = generateLine(lineId,strCable,1,pParent->getName()); //重新绘制
if(pLine) if(pLine)
establishConnection(p1,p2,pLine,ModelFunctionType::EditorModel); establishConnection(p1,p2,pLine,ModelFunctionType::EditorModel);
} }
@ -2276,10 +2317,15 @@ void DiagramEditorModel::bulidAndLinkComponent(QList<DiagramEditorComponentInfo>
} }
} }
else{ //connectdata不存在新建 else{ //connectdata不存在新建
auto pLine = generateLine(QUuid::createUuid(),"",1); lineId = QUuid::createUuid();
auto pLine = generateLine(lineId,strCable,1,pParent->getName());
if(pLine) if(pLine)
establishConnection(p1,p2,pLine,ModelFunctionType::EditorModel); establishConnection(p1,p2,pLine,ModelFunctionType::EditorModel);
} }
if(pParent){
pParent->addSubList(qMakePair(0,lineId));
}
} }
} }
} }
@ -2336,3 +2382,16 @@ DiagramEditorProjectInfo DiagramEditorModel::deserializeWizardData(const QByteAr
stream >> data; // 调用重载的操作符 stream >> data; // 调用重载的操作符
return data; return data;
} }
DiagramEditorBaseBlock* DiagramEditorModel::getBlockDataByName(QString sName,EditorItemType typ)
{
auto lstBlock = _pPanel->getBlockItems();
for(auto& block:lstBlock){
if(block->getName() == sName){
if(block->getType() == typ){
return block->getBlockData().data();
}
}
}
return nullptr;
}

View File

@ -2,7 +2,6 @@
#include "graphicsItem/graphicsBaseItem.h" #include "graphicsItem/graphicsBaseItem.h"
#include "graphicsItem/electricSvgItemBus.h" #include "graphicsItem/electricSvgItemBus.h"
#include "graphicsItem/electricSvgItemRect.h" #include "graphicsItem/electricSvgItemRect.h"
#include "graphicsItem/electricSvgItemTriangle.h"
#include "graphicsItem/electricConnectLineItem.h" #include "graphicsItem/electricConnectLineItem.h"
#include "graphicsItem/electricPortItem.h" #include "graphicsItem/electricPortItem.h"
#include "graphicsItem/electricSvgGroupCT.h" #include "graphicsItem/electricSvgGroupCT.h"
@ -40,11 +39,14 @@
#include <QMessageBox> #include <QMessageBox>
#include <QRandomGenerator> #include <QRandomGenerator>
#include <QJsonDocument> #include <QJsonDocument>
#include <QMdiSubWindow>
#include "baseProperty.h" #include "baseProperty.h"
#include "projectModelSetting.h" #include "projectModelSetting.h"
#include "bayManagerDlg.h" #include "bayManagerDlg.h"
#include "projectModelManager.h" #include "projectModelManager.h"
#include "projectIconSetting.h" #include "projectIconSetting.h"
#include "monitorPanel.h"
#include "designerView.h"
#include "global.h" #include "global.h"
bool FixedPortsModel::_dataInitialised = false; bool FixedPortsModel::_dataInitialised = false;
@ -137,7 +139,7 @@ bool FixedPortsModel::addNodeItem(QUuid uuid,GraphicsProjectModelItem* pItem)
} }
} }
void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height,double rotate) QString FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height,double rotate)
{ {
//todo:load图形时必有拓扑实体关联到对应的entity //todo:load图形时必有拓扑实体关联到对应的entity
BaseProperty* pro = nullptr; BaseProperty* pro = nullptr;
@ -151,7 +153,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
{ {
int type = pro->graphicsType(); int type = pro->graphicsType();
if(type == GIT_link) //连线对象外部处理 if(type == GIT_link) //连线对象外部处理
return; return QString("err");
QString sMeta = pro->metaModelName(); QString sMeta = pro->metaModelName();
QString sProModel = pro->modelName(); QString sProModel = pro->modelName();
@ -629,18 +631,19 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
item->editShape(0, pos); item->editShape(0, pos);
item->setPos(pos); item->setPos(pos);
item->setRotation(rotate); item->setRotation(rotate);
//item->setSelected(true);
_scene->addItem(item); _scene->addItem(item);
item->addPoint(pos); item->addPoint(pos);
item->setProperty(pro); //绑定模型 item->setProperty(pro); //绑定模型
item->updateByProperty(); //使用模型更新自身 item->updateByProperty(); //使用模型更新自身
QString sModel = _projectModelName.value(id.toString()); //QString sModel = _projectModelName.value(id.toString());
item->setModelName(sModel); //item->setModelName(sModel);
_nodeItem.insert(id,item); _nodeItem.insert(id,item);
connect(item,&GraphicsProjectModelItem::ifExist,this,&FixedPortsModel::onSignal_ifExits); connect(item,&GraphicsProjectModelItem::ifExist,this,&FixedPortsModel::onSignal_ifExits);
} }
return pro->name();
} }
} }
return QString("err");
} }
BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name,QString modelName) BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name,QString modelName)
@ -759,7 +762,7 @@ void FixedPortsModel::loadNodeDataFromDataBase()
} }
} }
void FixedPortsModel::addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort) QString FixedPortsModel::addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort)
{ {
GraphicsProjectModelItem* src = _nodeItem[srcId]; GraphicsProjectModelItem* src = _nodeItem[srcId];
GraphicsProjectModelItem* dest = _nodeItem[destId]; GraphicsProjectModelItem* dest = _nodeItem[destId];
@ -767,7 +770,7 @@ void FixedPortsModel::addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUui
if(mapData.contains(lineId)) if(mapData.contains(lineId))
{ {
BaseProperty* pPro = mapData.value(lineId); BaseProperty* pPro = mapData.value(lineId);
if(src && dest) if(src && dest && pPro)
{ {
ElectricConnectLineItem* pItem = new ElectricConnectLineItem(); ElectricConnectLineItem* pItem = new ElectricConnectLineItem();
pItem->setItemId(lineId); pItem->setItemId(lineId);
@ -797,8 +800,11 @@ void FixedPortsModel::addConnectLline(QUuid lineId,QUuid srcId,QUuid destId,QUui
addNodeItem(pItem->itemId(),pItem); addNodeItem(pItem->itemId(),pItem);
pItem->setProperty(pPro); pItem->setProperty(pPro);
} }
return pPro->name();
} }
} }
return QString("err");
} }
void FixedPortsModel::deleteNodeItem(GraphicsProjectModelItem* pItem) void FixedPortsModel::deleteNodeItem(GraphicsProjectModelItem* pItem)
@ -1236,6 +1242,17 @@ QString FixedPortsModel::removeSuffix(const QString& str)
return str.left(lastUnderscore); return str.left(lastUnderscore);
} }
ModelProperty* FixedPortsModel::getItemByUid(QList<GraphicsBaseItem*> lst,QUuid uid)
{
for(auto& item:lst){
auto pPro = item->getProperty();
if(pPro->uuid() == uid){
return pPro;
}
}
return nullptr;
}
QWidget* FixedPortsModel::getTopWidget() QWidget* FixedPortsModel::getTopWidget()
{ {
@ -1497,7 +1514,7 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<Graphi
pProPanel = _cavas->getPanel(sPageName); pProPanel = _cavas->getPanel(sPageName);
} }
for(auto& pBaseItem:lstItem) //第二次循环处理所有连线对象 for(auto& pBaseItem:lstItem) //先处理连线递归处理连线连接的item
{ {
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty()); BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
if(pBase->type() == 8){ //电缆 if(pBase->type() == 8){ //电缆
@ -1513,14 +1530,113 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<Graphi
} }
QList<BaseProperty*> lstProData; QList<BaseProperty*> lstProData;
QList<QPair<QString,QUuid>> lstItems;
QMap<QUuid,GraphicsProjectModelItem*> mapItem = pProPanel->getModelController()->allItems(); //根据item获取data QMap<QUuid,GraphicsProjectModelItem*> mapItem = pProPanel->getModelController()->allItems(); //根据item获取data
for(auto& item:mapItem){ for(auto& item:mapItem){
BaseProperty* pPro = dynamic_cast<BaseProperty*>(item->getProperty()); BaseProperty* pPro = dynamic_cast<BaseProperty*>(item->getProperty());
if(pPro){ if(pPro){
lstProData.append(pPro); lstProData.append(pPro);
lstItems.append(qMakePair(pPro->name(),pPro->uuid()));
} }
} }
QList<GraphicsBaseItem*> lstBase;
for(auto &pItem:lstItem){
GraphicsBaseItem* p = pItem;
lstBase.append(p);
}
QList<monitorRelationItem> lstFirst;
for(auto& pBaseItem:lstItem) //首次循环添加母线及独立设备(变压器等),更新列表显示使用
{
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
if(pBase->type() == 1){ //母线添加子间隔
monitorRelationItem info;
info.item.nEquipType = pBase->type();
info.item.nCategory = 0;
info.item.sName = pBase->name();
info.item.uid = pBase->uuid();
for(auto& subPair:pBase->getSubList()){
monitorRelationSturctItem subStruct;
BayProperty* pTargetBay = nullptr;
for(auto& pOtherItem:lstOther)
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
if(pBay->uuid() == subPair.second){ //从所有间隔中找到sublist中的间隔
pTargetBay = pBay;
break;
}
}
}
if(pTargetBay){
subStruct.nEquipType = 0;
subStruct.nCategory = 1;
subStruct.sName = pTargetBay->tag();
subStruct.uid = pTargetBay->uuid();
info.subList.append(subStruct);
}
}
lstFirst.append(info);
}
else if(pBase->type() == 15 || pBase->type() == 16){
monitorRelationItem info;
info.item.nEquipType = pBase->type();
info.item.nCategory = 0;
info.item.sName = pBase->name();
info.item.uid = pBase->uuid();
for(auto& subPair:pBase->getSubList()){
monitorRelationSturctItem subStruct;
auto pPro = getItemByUid(lstBase,subPair.second);
if(pPro){
subStruct.nEquipType = pPro->type();
subStruct.nCategory = 0;
subStruct.sName = pPro->name();
subStruct.uid = pPro->uuid();
info.subList.append(subStruct);
}
}
lstFirst.append(info);
}
}
emit updateCurrentItems(lstFirst,true);
QList<monitorRelationItem> lstSecond;
for(auto& pBaseItem:lstItem) //二次循环添加间隔内设备(更新列表显示使用)
{
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
if(pBase->type() != 1 && pBase->type() != 15 && pBase->type() != 16){ //设备添加
monitorRelationItem info;
info.item.nEquipType = pBase->type();
info.item.nCategory = 0;
info.item.sName = pBase->name();
info.item.uid = pBase->uuid();
BayProperty* pTargetBay = nullptr;
for(auto& pOtherItem:lstOther)
{
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
if(pBay){
if(pBay->tag() == pBase->getBay()){ //将bay添加到parent
info.parent.nEquipType = 0;
info.parent.nCategory = 1;
info.parent.sName = pBay->tag();
info.parent.uid = pBay->uuid();
break;
}
}
}
lstSecond.append(info);
}
}
emit updateCurrentItems(lstSecond,false);
for(auto& pOtherItem:lstOther) for(auto& pOtherItem:lstOther)
{ {
BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty()); BayProperty* pBay = dynamic_cast<BayProperty*>(pOtherItem->getProperty());
@ -1528,13 +1644,14 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<Graphi
BayProperty* pData = pProPanel->getModelController()->generateBayData(pBay,lstProData); BayProperty* pData = pProPanel->getModelController()->generateBayData(pBay,lstProData);
if(pData) if(pData)
{ {
pData->setSubList(pBay->getSubList());
pProPanel->getModelController()->addBayByData(pData); pProPanel->getModelController()->addBayByData(pData);
} }
} }
} }
} }
void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay) void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBlock)
{ {
QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData(); QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData();
for(auto& pro:mapEditor){ for(auto& pro:mapEditor){
@ -1550,6 +1667,32 @@ void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapIte
auto cloneItem = pItem->clone(); auto cloneItem = pItem->clone();
BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId()); BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId());
if(pPro){ if(pPro){
if(pPro->type() == 1){ //母线
for(auto item:mapBlock){
auto p = item->getBlockData(); //获取blockitem对应的data
if(p->getType() == 1){
DiagramEditorBusBlock* pBus = dynamic_cast<DiagramEditorBusBlock*>(p.data());
if(pBus){
QString sBus = pBus->getName();
if(sBus == pPro->name())
pPro->setSubList(pBus->getSubList()); //将子列表转移到item
}
}
}
}
else if(pPro->type() == 15 || pPro->type() == 16){ //变压器
for(auto item:mapBlock){
auto p = item->getBlockData(); //获取blockitem对应的data
if(p->getType() == 3){
DiagramEditorTransformerBlock* pTrans = dynamic_cast<DiagramEditorTransformerBlock*>(p.data());
if(pTrans){
QString sTrans = pTrans->getName();
if(sTrans == pPro->name())
pPro->setSubList(pTrans->getSubList()); //将子列表转移到item
}
}
}
}
cloneItem->setProperty(pPro); cloneItem->setProperty(pPro);
_scene->addItem(cloneItem); _scene->addItem(cloneItem);
cloneItem->setPos(pItem->pos()); cloneItem->setPos(pItem->pos());
@ -1585,85 +1728,88 @@ void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapIte
//_widget->getView()->centerOn(center); //_widget->getView()->centerOn(center);
//**************间隔************* //**************间隔*************
for(auto item:mapBay){ for(auto item:mapBlock){
auto p = item->getBlockData(); //获取blockitem对应的data auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data()); if(p->getType() == 2){
if(pBay){ DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
QString sBay = pBay->getName(); if(pBay){
auto bayInfo = pBay->getBayInfo(); QString sBay = pBay->getName();
auto mapRoute = bayInfo.mapRoute; auto bayInfo = pBay->getBayInfo();
auto mapCompo = bayInfo.mapComponent; auto mapRoute = bayInfo.mapRoute;
auto mapCompo = bayInfo.mapComponent;
QList<DiagramEditorComponentInfo> lstInfo; QList<DiagramEditorComponentInfo> lstInfo;
for(auto& route:mapRoute){ //获取路线中使用的设备 for(auto& route:mapRoute){ //获取路线中使用的设备
for(auto& compo:route.lstCompo){ for(auto& compo:route.lstCompo){
auto info = mapCompo.value(compo.sName); auto info = mapCompo.value(compo.sName);
bool exist = false; bool exist = false;
for(auto& inf:lstInfo){ for(auto& inf:lstInfo){
if(inf == info){ if(inf == info){
exist = true; exist = true;
break; break;
}
}
if(!exist){
lstInfo.append(info);
} }
} }
if(!exist){
lstInfo.append(info);
}
} }
}
QList<GraphicsBaseItem*> lst; QList<GraphicsBaseItem*> lst;
for(auto &inf:lstInfo){ for(auto &inf:lstInfo){
if(_baseItem.contains(inf.uid)) if(_baseItem.contains(inf.uid))
lst.append(_baseItem.value(inf.uid)); lst.append(_baseItem.value(inf.uid));
} }
QRectF rec = calculateItemsBoundingRect(lst); QRectF rec = calculateItemsBoundingRect(lst);
ElectricBayItem* pNew = new ElectricBayItem(rec); ElectricBayItem* pNew = new ElectricBayItem(rec);
pNew->setItemType(GIT_bay); pNew->setItemType(GIT_bay);
pNew->setText(sBay); pNew->setText(sBay);
QString sType; QString sType;
switch (pBay->getBayType()) { switch (pBay->getBayType()) {
case BayType::busSectionBay: case BayType::busSectionBay:
sType = QString("分段间隔"); sType = QString("分段间隔");
break; break;
case BayType::busCouplerBay: case BayType::busCouplerBay:
sType = QString("母联间隔"); sType = QString("母联间隔");
break; break;
case BayType::ptBay: case BayType::ptBay:
sType = QString("PT间隔"); sType = QString("PT间隔");
break; break;
case BayType::incomingBay: case BayType::incomingBay:
sType = QString("进线间隔"); sType = QString("进线间隔");
break; break;
case BayType::outcomingBay: case BayType::outcomingBay:
sType = QString("出线间隔"); sType = QString("出线间隔");
break; break;
case BayType::compensationBay: case BayType::compensationBay:
sType = QString("无功补偿间隔"); sType = QString("无功补偿间隔");
break; break;
case BayType::bypassBay: case BayType::bypassBay:
sType = QString("旁路间隔"); sType = QString("旁路间隔");
break; break;
default: default:
break; break;
} }
QUuid bayId = pBay->getId(); QUuid bayId = pBay->getId();
BayProperty* pBayData = addBayData(bayId,ModelFunctionType::BaseModel); BayProperty* pBayData = addBayData(bayId,ModelFunctionType::BaseModel);
pNew->setProperty(pBayData); pNew->setProperty(pBayData);
pBayData->setName(sBay); pBayData->setName(sBay);
pBayData->setTag(sBay); pBayData->setTag(sBay);
pBayData->setType(sType); pBayData->setType(sType);
pBayData->setLstFrom(pBay->getBayInfo().lstFrom); pBayData->setLstFrom(pBay->getBayInfo().lstFrom);
pBayData->setLstTo(pBay->getBayInfo().lstTo); pBayData->setLstTo(pBay->getBayInfo().lstTo);
pBayData->setSubList(pBay->getSubList());
for(auto &info:lstInfo){ for(auto &info:lstInfo){
pBayData->getLstComponent().append(info.uid); pBayData->getLstComponent().append(info.uid);
}
addBayItem(bayId,pNew,ModelFunctionType::BaseModel);
//pModel->addItemsToBay(lst,pNew);
_scene->addItem(pNew);
} }
addBayItem(bayId,pNew,ModelFunctionType::BaseModel);
//pModel->addItemsToBay(lst,pNew);
_scene->addItem(pNew);
} }
} }
} }
@ -1678,6 +1824,8 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
pPro->setSourceItemId(pBaseItem->itemId().toString()); //设置被哪个对象生成 pPro->setSourceItemId(pBaseItem->itemId().toString()); //设置被哪个对象生成
pPro->setMetaModelName(pBase->metaModelName()); //传递基模名 pPro->setMetaModelName(pBase->metaModelName()); //传递基模名
pPro->setPath(pBase->getBay()); pPro->setPath(pBase->getBay());
pPro->setSubList(pBase->getSubList()); //传递sublist
pPro->setBay(pBase->getBay());
QString sMeta = pBase->metaModelName(); QString sMeta = pBase->metaModelName();
QString sModel = pBase->modelName(); QString sModel = pBase->modelName();
@ -1964,22 +2112,6 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
} }
QPointF pos = proTer->relativePosition(); QPointF pos = proTer->relativePosition();
PortPos locate = PortPos(baseTer->getPortLocate()); PortPos locate = PortPos(baseTer->getPortLocate());
/*if(pos.x() < 0)
{
locate = P_left;
}
else if(pos.x() > 0)
{
locate = P_right;
}
else if(pos.y() > 0)
{
locate = P_down;
}
else if(pos.y() < 0)
{
locate = P_top;
}*/
pProItem->addPort(P_const,pos,proTer->id(),typ,locate,dPerX,dPerY); pProItem->addPort(P_const,pos,proTer->id(),typ,locate,dPerX,dPerY);
ItemPort* pPort = pProItem->getPortById(proTer->id()); ItemPort* pPort = pProItem->getPortById(proTer->id());
@ -1993,9 +2125,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
pPanel->getScene()->addItem(pProItem); pPanel->getScene()->addItem(pProItem);
pProItem->setProperty(pPro); //绑定模型 pProItem->setProperty(pPro); //绑定模型
pProItem->updateByProperty(); //使用模型更新自身 pProItem->updateByProperty(); //使用模型更新自身
//QString sModel = _projectModelName.value(id.toString());
//QString sModel = pBase->getModelProperty().modelSetting.modelName;
//pProItem->setModelName(sModel);
pPanel->getModelController()->addNodeItem(QUuid(pEntity->id()),pProItem); pPanel->getModelController()->addNodeItem(QUuid(pEntity->id()),pProItem);
} }
} }
@ -2092,7 +2222,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
pPro->setConnection(Connection(QUuid(proFromItemId),QUuid(proFromTerId),proFromType,proFromPos,QUuid(proToItemId),QUuid(proToTerId),proToType,proToPos)); pPro->setConnection(Connection(QUuid(proFromItemId),QUuid(proFromTerId),proFromType,proFromPos,QUuid(proToItemId),QUuid(proToTerId),proToType,proToPos));
} }
} }
//QString sModel = pBase->getModelProperty().modelSetting.modelName;
if(pProItem){ if(pProItem){
pProItem->setModelName(sModel); pProItem->setModelName(sModel);
pProItem->setRotation(pItem->rotation()); pProItem->setRotation(pItem->rotation());
@ -2440,3 +2570,61 @@ QList<QUuid> FixedPortsModel::turnJsonArrToList(QJsonObject object,QString sInne
return lst; return lst;
} }
void FixedPortsModel::generateMonitor(QString sPage,QList<QPair<QString,QUuid>> lst)
{
MonitorPanel* pPanel = nullptr;
if(_cavas){
DiagramInfo info;
info.id = QUuid::createUuid();
info.sName = sPage;
info.sTag = sPage;
info.sBasePageName = _pageName;
info.parentId = _pEntity->id();
_cavas->onSignal_createDiagram(info,DiagramMode::DM_run);
pPanel = _cavas->getMonitorPanel(sPage);
QList<QPair<QString,QUuid>> lstCreated;
for(auto& pair:lst)
{
if(_nodeItem.contains(pair.second)){
auto pItem = _nodeItem.value(pair.second);
BaseProperty* pPro = dynamic_cast<BaseProperty*>(pItem->getProperty());
if(pPro){
auto pNewItem = pItem->clone();
if(pPro->type() == 8){
auto pLine = dynamic_cast<ElectricConnectLineItem*>(pNewItem);
if(pLine)
pLine->calculatePath();
}
else{
pNewItem->updateItem();
}
if(pNewItem && pPanel){
pNewItem->setProperty(pPro);
pNewItem->updateHandles();
pNewItem->updateByProperty(); //使用模型更新自身
pPanel->getModelController()->addNodeItem(pPro->uuid(),pNewItem);
pPanel->getScene()->addItem(pNewItem); //绑定模型
lstCreated.append(qMakePair(pPro->name(),pPro->uuid()));
}
}
}
}
if (!pPanel->getScene()->items().isEmpty()) {
QRectF itemsRect = pPanel->getScene()->itemsBoundingRect();
itemsRect.adjust(-30, -30, 30, 30);
auto map = _cavas->getMapMonitor();
if(map.contains(sPage)){
auto pSubWin = map.value(sPage).second;
pSubWin->resize(itemsRect.width(),itemsRect.height());
}
//pPanel->getScene()->setSceneRect(itemsRect);
pPanel->getView()->fitInView(itemsRect, Qt::KeepAspectRatio);
}
emit pPanel->getModelController()->monitorCreated(_pageName,qMakePair(sPage,info.id.toUuid()));
emit pPanel->getModelController()->monitorItems(lstCreated);
}
}

View File

@ -5,6 +5,27 @@
ElectricConnectLineItem::ElectricConnectLineItem(QGraphicsItem *parent) ElectricConnectLineItem::ElectricConnectLineItem(QGraphicsItem *parent)
: GraphicsProjectModelItem(parent) : GraphicsProjectModelItem(parent)
{
initial();
}
ElectricConnectLineItem::ElectricConnectLineItem(const ElectricConnectLineItem& obj)
: GraphicsProjectModelItem(obj)
{
initial();
m_lstPoints = obj.m_lstPoints;
}
ElectricConnectLineItem::~ElectricConnectLineItem()
{
}
ElectricConnectLineItem* ElectricConnectLineItem::clone() const
{
return new ElectricConnectLineItem(*this);
}
void ElectricConnectLineItem::initial()
{ {
m_boundingRect = QRectF(); m_boundingRect = QRectF();
m_pen = QPen(Qt::black); m_pen = QPen(Qt::black);
@ -17,9 +38,6 @@ ElectricConnectLineItem::ElectricConnectLineItem(QGraphicsItem *parent)
_curLine = QPoint(); _curLine = QPoint();
} }
ElectricConnectLineItem::~ElectricConnectLineItem()
{
}
void ElectricConnectLineItem::setStartPoint(const QPointF& p) void ElectricConnectLineItem::setStartPoint(const QPointF& p)
{ {

View File

@ -8,12 +8,13 @@
ElectricPortItem::ElectricPortItem(QGraphicsItem *parent) ElectricPortItem::ElectricPortItem(QGraphicsItem *parent)
: GraphicsProjectModelItem(parent) : GraphicsProjectModelItem(parent)
{ {
m_boundingRect = QRectF(-1,-1,2,2); initial();
m_pen = QPen(Qt::black); }
m_brush = QBrush(Qt::black);
setHandleVisible(false); ElectricPortItem::ElectricPortItem(const ElectricPortItem& obj)
setFunctionHandleIfShow(false); : GraphicsProjectModelItem(obj)
setFunctionHandleEnaable(false); {
initial();
} }
ElectricPortItem::~ElectricPortItem() ElectricPortItem::~ElectricPortItem()
@ -21,6 +22,11 @@ ElectricPortItem::~ElectricPortItem()
} }
ElectricPortItem* ElectricPortItem::clone() const
{
return new ElectricPortItem(*this);
}
QRectF ElectricPortItem::boundingRect() const QRectF ElectricPortItem::boundingRect() const
{ {
return m_boundingRect; return m_boundingRect;
@ -57,3 +63,13 @@ void ElectricPortItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*
painter->setBrush(m_brush); painter->setBrush(m_brush);
painter->drawEllipse(m_boundingRect); painter->drawEllipse(m_boundingRect);
} }
void ElectricPortItem::initial()
{
m_boundingRect = QRectF(-1,-1,2,2);
m_pen = QPen(Qt::black);
m_brush = QBrush(Qt::black);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -14,11 +14,26 @@ ElectricSvgGroup::ElectricSvgGroup(const QRect &rect,QGraphicsItem *parent)
m_dHeight = rect.height(); m_dHeight = rect.height();
} }
ElectricSvgGroup::ElectricSvgGroup(const ElectricSvgGroup& obj)
: GraphicsProjectModelGroup(obj)
{
m_lastBoudingRect = obj.m_lastBoudingRect;
m_boundingRect = obj.m_boundingRect;
m_dWidth = obj.m_dWidth;
m_dHeight = obj.m_dHeight;
m_mapSvg = obj.m_mapSvg;
}
ElectricSvgGroup::~ElectricSvgGroup() ElectricSvgGroup::~ElectricSvgGroup()
{ {
} }
ElectricSvgGroup* ElectricSvgGroup::clone() const
{
return new ElectricSvgGroup(*this);
}
QPainterPath ElectricSvgGroup::shape() QPainterPath ElectricSvgGroup::shape()
{ {
QPainterPath path; QPainterPath path;

View File

@ -18,11 +18,30 @@ ElectricSvgGroupCT::ElectricSvgGroupCT(const QRect &rect, QGraphicsItem *parent)
setFunctionHandleEnaable(false); setFunctionHandleEnaable(false);
} }
ElectricSvgGroupCT::ElectricSvgGroupCT(const ElectricSvgGroupCT& obj)
:ElectricSvgGroup(obj)
{
setHandleIfShow(H_textCaption,false);
setHandleIfShow(H_textCurrent,false);
setHandleIfShow(h_textVoltage,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
_nType = obj._nType;
_nSize = obj._nSize;
}
ElectricSvgGroupCT::~ElectricSvgGroupCT() ElectricSvgGroupCT::~ElectricSvgGroupCT()
{ {
} }
ElectricSvgGroupCT* ElectricSvgGroupCT::clone() const
{
return new ElectricSvgGroupCT(*this);
}
void ElectricSvgGroupCT::setupFinish(QVariant var) void ElectricSvgGroupCT::setupFinish(QVariant var)
{ {
if(var.canConvert<QPair<int,int>>()){ if(var.canConvert<QPair<int,int>>()){

View File

@ -16,11 +16,26 @@ ElectricSvgGroupPT::ElectricSvgGroupPT(const QRect &rect, QGraphicsItem *parent)
setFunctionHandleEnaable(false); setFunctionHandleEnaable(false);
} }
ElectricSvgGroupPT::ElectricSvgGroupPT(const ElectricSvgGroupPT& obj)
: ElectricSvgGroup(obj)
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
m_lstType = obj.m_lstType;
}
ElectricSvgGroupPT::~ElectricSvgGroupPT() ElectricSvgGroupPT::~ElectricSvgGroupPT()
{ {
} }
ElectricSvgGroupPT* ElectricSvgGroupPT::clone() const
{
return new ElectricSvgGroupPT(*this);
}
void ElectricSvgGroupPT::setupFinish(QVariant var) void ElectricSvgGroupPT::setupFinish(QVariant var)
{ {
if(var.canConvert<QList<int>>()){ if(var.canConvert<QList<int>>()){

View File

@ -20,9 +20,33 @@ ElectricSvgItem::ElectricSvgItem(const QRect &rect, bool autoGenPort,QGraphicsIt
setFunctionHandleEnaable(false); setFunctionHandleEnaable(false);
} }
ElectricSvgItem::ElectricSvgItem(const ElectricSvgItem& obj)
: GraphicsProjectModelItem(obj)
{
m_lastBoudingRect = obj.m_lastBoudingRect;
m_boundingRect = obj.m_boundingRect;
m_dWidth = obj.m_dWidth;
m_dHeight = obj.m_dHeight;
_tempSvg = obj._tempSvg;
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
if(!_tempSvg.isEmpty())
m_pRender = new QSvgRenderer(_tempSvg);
}
ElectricSvgItem::~ElectricSvgItem() ElectricSvgItem::~ElectricSvgItem()
{ {
if(m_pRender)
delete m_pRender;
}
ElectricSvgItem* ElectricSvgItem::clone() const
{
return new ElectricSvgItem(*this);
} }
QPainterPath ElectricSvgItem::shape() QPainterPath ElectricSvgItem::shape()
@ -116,6 +140,7 @@ void ElectricSvgItem::move(const QPointF& point)
void ElectricSvgItem::loadSvg(QByteArray b) void ElectricSvgItem::loadSvg(QByteArray b)
{ {
m_pRender = new QSvgRenderer(b); m_pRender = new QSvgRenderer(b);
_tempSvg = b;
} }
void ElectricSvgItem::updateMapSvg(QMap<QString,QByteArray> map) void ElectricSvgItem::updateMapSvg(QMap<QString,QByteArray> map)

View File

@ -9,10 +9,13 @@
ElectricSvgItem2wTransformer::ElectricSvgItem2wTransformer(const QRect &rect, QGraphicsItem *parent) ElectricSvgItem2wTransformer::ElectricSvgItem2wTransformer(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItem2wTransformer::ElectricSvgItem2wTransformer(const ElectricSvgItem2wTransformer& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItem2wTransformer::~ElectricSvgItem2wTransformer() ElectricSvgItem2wTransformer::~ElectricSvgItem2wTransformer()
@ -20,9 +23,20 @@ ElectricSvgItem2wTransformer::~ElectricSvgItem2wTransformer()
} }
ElectricSvgItem2wTransformer* ElectricSvgItem2wTransformer::clone() const
{
return new ElectricSvgItem2wTransformer(*this);
}
void ElectricSvgItem2wTransformer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItem2wTransformer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItem2wTransformer::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItem3wTransformer::ElectricSvgItem3wTransformer(const QRect &rect, QGraphicsItem *parent) ElectricSvgItem3wTransformer::ElectricSvgItem3wTransformer(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItem3wTransformer::ElectricSvgItem3wTransformer(const ElectricSvgItem3wTransformer& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItem3wTransformer::~ElectricSvgItem3wTransformer() ElectricSvgItem3wTransformer::~ElectricSvgItem3wTransformer()
@ -20,9 +23,21 @@ ElectricSvgItem3wTransformer::~ElectricSvgItem3wTransformer()
} }
ElectricSvgItem3wTransformer* ElectricSvgItem3wTransformer::clone() const
{
return new ElectricSvgItem3wTransformer(*this);
}
void ElectricSvgItem3wTransformer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItem3wTransformer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItem3wTransformer::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -11,13 +11,13 @@
ElectricSvgItemBus::ElectricSvgItemBus(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemBus::ElectricSvgItemBus(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
//loadSvg(":/images/element/svg_bus.svg"); initial();
setHandleIfShow(H_textCaption,false); }
setHandleVisible(false);
setFunctionHandleIfShow(false); ElectricSvgItemBus::ElectricSvgItemBus(const ElectricSvgItemBus& obj)
setFunctionHandleEnaable(false); : ElectricSvgItem(obj)
setHandleEnaable(H_right,true); {
setHandleEnaable(H_left,true); initial();
} }
ElectricSvgItemBus::~ElectricSvgItemBus() ElectricSvgItemBus::~ElectricSvgItemBus()
@ -25,6 +25,11 @@ ElectricSvgItemBus::~ElectricSvgItemBus()
} }
ElectricSvgItemBus* ElectricSvgItemBus::clone() const
{
return new ElectricSvgItemBus(*this);
}
void ElectricSvgItemBus::updateHandles() void ElectricSvgItemBus::updateHandles()
{ {
ElectricSvgItem::updateHandles(); ElectricSvgItem::updateHandles();
@ -60,3 +65,13 @@ void ElectricSvgItemBus::paint(QPainter* painter, const QStyleOptionGraphicsItem
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemBus::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
setHandleEnaable(H_right,true);
setHandleEnaable(H_left,true);
}

View File

@ -16,10 +16,14 @@ ElectricSvgItemCT::ElectricSvgItemCT(const QRect &rect, QGraphicsItem *parent)
setHandleVisible(false); setHandleVisible(false);
setFunctionHandleIfShow(false); setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);*/ setFunctionHandleEnaable(false);*/
initial();
}
setFlag(QGraphicsItem::ItemIsSelectable, false); ElectricSvgItemCT::ElectricSvgItemCT(const ElectricSvgItemCT& obj)
setFlag(QGraphicsItem::ItemIsFocusable, false); :ElectricSvgItem(obj)
setAcceptedMouseButtons(Qt::NoButton); {
initial();
_itemType = obj._itemType;
} }
ElectricSvgItemCT::~ElectricSvgItemCT() ElectricSvgItemCT::~ElectricSvgItemCT()
@ -27,6 +31,18 @@ ElectricSvgItemCT::~ElectricSvgItemCT()
} }
ElectricSvgItemCT* ElectricSvgItemCT::clone() const
{
return new ElectricSvgItemCT(*this);
}
void ElectricSvgItemCT::initial()
{
setFlag(QGraphicsItem::ItemIsSelectable, false);
setFlag(QGraphicsItem::ItemIsFocusable, false);
setAcceptedMouseButtons(Qt::NoButton);
}
void ElectricSvgItemCT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemCT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
if (!m_pRender || !m_pRender->isValid()) if (!m_pRender || !m_pRender->isValid())

View File

@ -9,10 +9,13 @@
ElectricSvgItemCableEnd::ElectricSvgItemCableEnd(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemCableEnd::ElectricSvgItemCableEnd(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemCableEnd::ElectricSvgItemCableEnd(const ElectricSvgItemCableEnd& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemCableEnd::~ElectricSvgItemCableEnd() ElectricSvgItemCableEnd::~ElectricSvgItemCableEnd()
@ -20,9 +23,21 @@ ElectricSvgItemCableEnd::~ElectricSvgItemCableEnd()
} }
ElectricSvgItemCableEnd* ElectricSvgItemCableEnd::clone() const
{
return new ElectricSvgItemCableEnd(*this);
}
void ElectricSvgItemCableEnd::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemCableEnd::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemCableEnd::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemCableTer::ElectricSvgItemCableTer(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemCableTer::ElectricSvgItemCableTer(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemCableTer::ElectricSvgItemCableTer(const ElectricSvgItemCableTer& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemCableTer::~ElectricSvgItemCableTer() ElectricSvgItemCableTer::~ElectricSvgItemCableTer()
@ -20,9 +23,20 @@ ElectricSvgItemCableTer::~ElectricSvgItemCableTer()
} }
ElectricSvgItemCableTer* ElectricSvgItemCableTer::clone() const
{
return new ElectricSvgItemCableTer(*this);
}
void ElectricSvgItemCableTer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemCableTer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemCableTer::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemDS::ElectricSvgItemDS(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemDS::ElectricSvgItemDS(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemDS::ElectricSvgItemDS(const ElectricSvgItemDS& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemDS::~ElectricSvgItemDS() ElectricSvgItemDS::~ElectricSvgItemDS()
@ -20,9 +23,21 @@ ElectricSvgItemDS::~ElectricSvgItemDS()
} }
ElectricSvgItemDS* ElectricSvgItemDS::clone() const
{
return new ElectricSvgItemDS(*this);
}
void ElectricSvgItemDS::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemDS::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemDS::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemDTEDS::ElectricSvgItemDTEDS(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemDTEDS::ElectricSvgItemDTEDS(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); inital();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemDTEDS::ElectricSvgItemDTEDS(const ElectricSvgItemDTEDS& obj)
: ElectricSvgItem(obj)
{
inital();
} }
ElectricSvgItemDTEDS::~ElectricSvgItemDTEDS() ElectricSvgItemDTEDS::~ElectricSvgItemDTEDS()
@ -20,9 +23,21 @@ ElectricSvgItemDTEDS::~ElectricSvgItemDTEDS()
} }
ElectricSvgItemDTEDS* ElectricSvgItemDTEDS::clone() const
{
return new ElectricSvgItemDTEDS(*this);
}
void ElectricSvgItemDTEDS::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemDTEDS::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemDTEDS::inital()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemES::ElectricSvgItemES(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemES::ElectricSvgItemES(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemES::ElectricSvgItemES(const ElectricSvgItemES& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemES::~ElectricSvgItemES() ElectricSvgItemES::~ElectricSvgItemES()
@ -20,9 +23,21 @@ ElectricSvgItemES::~ElectricSvgItemES()
} }
ElectricSvgItemES* ElectricSvgItemES::clone() const
{
return new ElectricSvgItemES(*this);
}
void ElectricSvgItemES::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemES::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemES::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemFES::ElectricSvgItemFES(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemFES::ElectricSvgItemFES(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemFES::ElectricSvgItemFES(const ElectricSvgItemFES& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemFES::~ElectricSvgItemFES() ElectricSvgItemFES::~ElectricSvgItemFES()
@ -20,9 +23,20 @@ ElectricSvgItemFES::~ElectricSvgItemFES()
} }
ElectricSvgItemFES* ElectricSvgItemFES::clone() const
{
return new ElectricSvgItemFES(*this);
}
void ElectricSvgItemFES::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemFES::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemFES::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -9,10 +9,13 @@
ElectricSvgItemLA::ElectricSvgItemLA(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemLA::ElectricSvgItemLA(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemLA::ElectricSvgItemLA(const ElectricSvgItemLA& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemLA::~ElectricSvgItemLA() ElectricSvgItemLA::~ElectricSvgItemLA()
@ -20,9 +23,21 @@ ElectricSvgItemLA::~ElectricSvgItemLA()
} }
ElectricSvgItemLA* ElectricSvgItemLA::clone() const
{
return new ElectricSvgItemLA(*this);
}
void ElectricSvgItemLA::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemLA::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemLA::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -10,10 +10,13 @@
ElectricSvgItemPI::ElectricSvgItemPI(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemPI::ElectricSvgItemPI(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setHandleIfShow(H_textCaption,false); initial();
setHandleVisible(false); }
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); ElectricSvgItemPI::ElectricSvgItemPI(const ElectricSvgItemPI& obj)
: ElectricSvgItem(obj)
{
initial();
} }
ElectricSvgItemPI::~ElectricSvgItemPI() ElectricSvgItemPI::~ElectricSvgItemPI()
@ -21,10 +24,21 @@ ElectricSvgItemPI::~ElectricSvgItemPI()
} }
ElectricSvgItemPI* ElectricSvgItemPI::clone() const
{
return new ElectricSvgItemPI(*this);
}
void ElectricSvgItemPI::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemPI::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemPI::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -10,9 +10,14 @@
ElectricSvgItemPT::ElectricSvgItemPT(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemPT::ElectricSvgItemPT(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
setFlag(QGraphicsItem::ItemIsSelectable, false); initial();
setFlag(QGraphicsItem::ItemIsFocusable, false); }
setAcceptedMouseButtons(Qt::NoButton);
ElectricSvgItemPT::ElectricSvgItemPT(const ElectricSvgItemPT& obj)
: ElectricSvgItem(obj)
{
initial();
_itemType = obj._itemType;
} }
ElectricSvgItemPT::~ElectricSvgItemPT() ElectricSvgItemPT::~ElectricSvgItemPT()
@ -20,6 +25,11 @@ ElectricSvgItemPT::~ElectricSvgItemPT()
} }
ElectricSvgItemPT* ElectricSvgItemPT::clone() const
{
return new ElectricSvgItemPT(*this);
}
void ElectricSvgItemPT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void ElectricSvgItemPT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
if (!m_pRender || !m_pRender->isValid()) if (!m_pRender || !m_pRender->isValid())
@ -27,4 +37,10 @@ void ElectricSvgItemPT::paint(QPainter* painter, const QStyleOptionGraphicsItem*
m_pRender->render(painter, m_boundingRect); m_pRender->render(painter, m_boundingRect);
} }
void ElectricSvgItemPT::initial()
{
setFlag(QGraphicsItem::ItemIsSelectable, false);
setFlag(QGraphicsItem::ItemIsFocusable, false);
setAcceptedMouseButtons(Qt::NoButton);
}

View File

@ -11,21 +11,13 @@
ElectricSvgItemRect::ElectricSvgItemRect(const QRect &rect, bool genNewPort, QGraphicsItem *parent) ElectricSvgItemRect::ElectricSvgItemRect(const QRect &rect, bool genNewPort, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
//loadSvg(":/images/element/svg_rect.svg"); initial();
setHandleIfShow(H_textCaption,false); }
setHandleIfShow(H_textCurrent,false);
setHandleIfShow(h_textVoltage,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
m_dRatioX = 0.5; ElectricSvgItemRect::ElectricSvgItemRect(const ElectricSvgItemRect& obj)
: ElectricSvgItem(obj)
/*if(genNewPort) {
{ initial();
addPort(P_const,QPointF(boundingRect().right() - boundingRect().width() * m_dRatioX, boundingRect().top()),QUuid::createUuid().toString(),T_lineIn,P_top);
addPort(P_const,QPointF(boundingRect().right() - boundingRect().width() * m_dRatioX, boundingRect().bottom()),QUuid::createUuid().toString(),T_lineOut,P_down);
}*/
} }
ElectricSvgItemRect::~ElectricSvgItemRect() ElectricSvgItemRect::~ElectricSvgItemRect()
@ -33,6 +25,11 @@ ElectricSvgItemRect::~ElectricSvgItemRect()
} }
ElectricSvgItemRect* ElectricSvgItemRect::clone() const
{
return new ElectricSvgItemRect(*this);
}
void ElectricSvgItemRect::updateHandles() void ElectricSvgItemRect::updateHandles()
{ {
ElectricSvgItem::updateHandles(); ElectricSvgItem::updateHandles();
@ -43,4 +40,12 @@ void ElectricSvgItemRect::paint(QPainter* painter, const QStyleOptionGraphicsIte
ElectricSvgItem::paint(painter,option,widget); ElectricSvgItem::paint(painter,option,widget);
} }
void ElectricSvgItemRect::initial()
{
setHandleIfShow(H_textCaption,false);
setHandleIfShow(H_textCurrent,false);
setHandleIfShow(h_textVoltage,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}

View File

@ -7,40 +7,10 @@
ElectricSvgItemTriangle::ElectricSvgItemTriangle(const QRect &rect, QGraphicsItem *parent) ElectricSvgItemTriangle::ElectricSvgItemTriangle(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent) : ElectricSvgItem(rect,parent)
{ {
//loadSvg(":/images/element/svg_triangle.svg");
setHandleIfShow(H_textCaption,false); setHandleIfShow(H_textCaption,false);
setHandleVisible(false); setHandleVisible(false);
setFunctionHandleIfShow(false); setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); setFunctionHandleEnaable(false);
//入线口
/*ItemPort* pHandle1 = new ItemPort(this);
pHandle1->setType(T_lineOut);
pHandle1->setTag(H_connect);
pHandle1->setPortPos(P_top);
pHandle1->setParent(this);
m_vecHanle.insert(H_connect,pHandle1);
//出线口
ItemPort* pHandle2 = new ItemPort(this);
pHandle2->setType(T_lineIn);
pHandle2->setTag(H_connect+1);
pHandle2->setPortPos(P_down);
pHandle2->setParent(this);
m_vecHanle.insert(H_connect+1,pHandle2);
ItemPort* pHandle3 = new ItemPort(this);
pHandle3->setType(T_lineIn);
pHandle3->setTag(H_connect+2);
pHandle3->setPortPos(P_down);
pHandle3->setParent(this);
m_vecHanle.insert(H_connect+2,pHandle3);
m_dTopRatioX = 0.5;
m_dBottomRatioX = 0.333;
m_mapPort.insert(QString::number(_portId++),pHandle1);
m_mapPort.insert(QString::number(_portId++),pHandle2);
m_mapPort.insert(QString::number(_portId++),pHandle3);*/
} }
ElectricSvgItemTriangle::~ElectricSvgItemTriangle() ElectricSvgItemTriangle::~ElectricSvgItemTriangle()

View File

@ -41,7 +41,7 @@ GraphicsBaseItem::GraphicsBaseItem(const GraphicsBaseItem& obj)
m_boundingRect_selected = obj.m_boundingRect_selected; m_boundingRect_selected = obj.m_boundingRect_selected;
PortState tpe; PortState tpe;
if(m_Itemtype == GIT_baseNode || m_Itemtype == GIT_baseBus){ if(m_Itemtype == GIT_baseNode || m_Itemtype == GIT_baseBus || m_Itemtype == GIT_node || m_Itemtype == GIT_bus){
tpe = p_movable; tpe = p_movable;
} }
else{ else{
@ -242,6 +242,11 @@ GraphicsBaseModelItem::~GraphicsBaseModelItem()
} }
GraphicsBaseModelItem* GraphicsBaseModelItem::clone() const
{
return new GraphicsBaseModelItem(*this);
}
void GraphicsBaseModelItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) void GraphicsBaseModelItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{ {
if(_stateMask){ if(_stateMask){
@ -282,7 +287,7 @@ GraphicsBaseModelGroup::~GraphicsBaseModelGroup()
GraphicsBaseModelGroup* GraphicsBaseModelGroup::clone() const GraphicsBaseModelGroup* GraphicsBaseModelGroup::clone() const
{ {
return new GraphicsBaseModelGroup(*this);
} }
void GraphicsBaseModelGroup::addItem(GraphicsBaseModelItem* item) void GraphicsBaseModelGroup::addItem(GraphicsBaseModelItem* item)
@ -364,11 +369,55 @@ GraphicsProjectModelItem::GraphicsProjectModelItem(QGraphicsItem *parent)
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
} }
GraphicsProjectModelItem::GraphicsProjectModelItem(const GraphicsProjectModelItem& obj)
:GraphicsBaseItem(obj)
{
_lastPort = -1;
//初始化缩放操作用的handle
//m_vecHanle.reserve(H_left);
for(int i = H_leftTop; i <= H_left; i++)
{
ItemControlHandle* pHandle = new HandleRect(this);
pHandle->setType(T_resize);
pHandle->setTag(i);
m_vecHanle.insert(i-1,pHandle);
}
for(int i = H_rotate_leftTop; i <= H_rotate_leftBottom; i++)
{
ItemControlHandle* pHandle = new HandleRect(this);
pHandle->setType(T_rotate);
pHandle->setTag(i);
m_vecHanle.insert(i-1,pHandle);
}
HandleText* pHandle = new HandleText(this);
pHandle->setType(T_text);
pHandle->setTag(H_textCaption);
pHandle->setPos(30,-30);
pHandle->setParent(this);
m_vecHanle.insert(H_textCaption,pHandle);
m_state = obj.m_state;
m_beginConnectPoint = obj.m_beginConnectPoint;
m_endConnectPoint = obj.m_endConnectPoint;
_modelName = obj._modelName;
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
setPos(obj.pos());
setRotation(obj.rotation());
}
GraphicsProjectModelItem::~GraphicsProjectModelItem() GraphicsProjectModelItem::~GraphicsProjectModelItem()
{ {
} }
GraphicsProjectModelItem* GraphicsProjectModelItem::clone() const
{
return new GraphicsProjectModelItem(*this);
}
void GraphicsProjectModelItem::createOperationCopy() void GraphicsProjectModelItem::createOperationCopy()
{ {
@ -450,6 +499,13 @@ void GraphicsProjectModelItem::contextMenuEvent(QGraphicsSceneContextMenuEvent*
Q_UNUSED(event); Q_UNUSED(event);
} }
void GraphicsProjectModelItem::paint(QPainter *painter,const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(painter);
Q_UNUSED(option);
Q_UNUSED(widget);
}
void GraphicsProjectModelItem::setLabelTag(const QString& name) void GraphicsProjectModelItem::setLabelTag(const QString& name)
{ {
m_vecHanle[H_textCaption]->setText(name); m_vecHanle[H_textCaption]->setText(name);
@ -546,11 +602,28 @@ GraphicsProjectModelGroup::GraphicsProjectModelGroup(QGraphicsItem *parent)
} }
GraphicsProjectModelGroup::GraphicsProjectModelGroup(const GraphicsProjectModelGroup& obj)
:GraphicsProjectModelItem(obj)
{
m_direction = obj.m_direction;
m_spacing = obj.m_spacing;
_groupType = obj.m_spacing;
for(auto &pItem:obj.m_childItems){
auto newItem = pItem->clone();
m_childItems.append(newItem);
}
}
GraphicsProjectModelGroup::~GraphicsProjectModelGroup() GraphicsProjectModelGroup::~GraphicsProjectModelGroup()
{ {
} }
GraphicsProjectModelGroup* GraphicsProjectModelGroup::clone() const
{
return new GraphicsProjectModelGroup(*this);
}
void GraphicsProjectModelGroup::addItem(GraphicsProjectModelItem* item) void GraphicsProjectModelGroup::addItem(GraphicsProjectModelItem* item)
{ {

View File

@ -0,0 +1,87 @@
#include <QJsonArray>
#include "monitorPanel.h"
#include <QMessageBox>
#include <QCloseEvent>
#include "graphicsDataModel/fixedPortsModel.h"
#include "graphicsItem/graphicsBaseItem.h"
#include "powerEntity.h"
#include "statusBar.h"
#include "baseProperty.h"
#include "graphicsItem/electricBayItem.h"
MonitorPanel::MonitorPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode)
: BaseDrawingPanel(pEntity,parent,mode)
{
m_pStatusBar->setButtonVisible(false);
}
MonitorPanel::~MonitorPanel()
{
}
void MonitorPanel::closeEvent(QCloseEvent *closeEvent)
{
emit panelDelete(_name,2);
}
QJsonObject MonitorPanel::getMonitorInfo() const
{
QJsonObject obj;
QJsonArray arr;
if(_pModel)
{
QMap<QUuid,itemPageInfo> map = _pModel->allNodePos();
for(auto iter = map.begin();iter != map.end();++iter)
{
QJsonObject node;
node["id"] = iter.key().toString();
node["x"] = iter.value().pos.x();
node["y"] = iter.value().pos.y();
node["width"] = iter.value().dWidth;
node["height"] = iter.value().dHeight;
node["rotate"] = iter.value().dRotate;
arr.append(node);
}
obj["nodes"] = arr;
QJsonArray arrConnect;
QVector<ModelProperty*> vec = _pModel->allConnectionProperty();
for(auto& pPro:vec){
Connection con = pPro->getConnection();
QJsonObject connect;
connect["id"] = pPro->uuid().toString();
connect["SrcNodeId"] = con.nSrcNodeId.toString();
connect["SrcPortId"] = con.nSrcPortId.toString();
connect["DestNodeId"] = con.nDestNodeId.toString();
connect["DestPortId"] = con.nDestPortId.toString();
arrConnect.append(connect);
}
obj["connections"] = arrConnect;
QJsonArray arrBay;
QMap<QUuid,ElectricBayItem*> mapBay = _pModel->allBayItem();
for(auto& bayItem:mapBay){
AbstractProperty* pPro = bayItem->getProperty();
BayProperty* pBay = dynamic_cast<BayProperty*>(pPro);
if(pBay)
{
QJsonObject bay;
bay["id"] = pBay->uuid().toString();
arrBay.append(bay);
}
}
obj["bays"] = arrBay;
}
return obj;
}
void MonitorPanel::loadNodes(QJsonObject obj)
{
}
void MonitorPanel::saveNodes(int pageId)
{
}

View File

@ -749,6 +749,13 @@ PowerEntity* TopologyManager::createDiagram(const QString& id,const QString& nam
m_baseDiagrams.insert(entity->id(), entity); m_baseDiagrams.insert(entity->id(), entity);
} }
} }
else if(funType == ModelFunctionType::RuntimeModel){
if(!m_monitorDiagrams.contains(id))
{
entity = new ConfigurationDiagram(id,name);
m_monitorDiagrams.insert(entity->id(), entity);
}
}
return entity; return entity;
} }
@ -759,6 +766,8 @@ PowerEntity* TopologyManager::findDiagram(const QString& id,ModelFunctionType fu
return m_diagrams.value(id, nullptr); // 避免异常的安全查询 return m_diagrams.value(id, nullptr); // 避免异常的安全查询
else if(funType == ModelFunctionType::BaseModel) else if(funType == ModelFunctionType::BaseModel)
return m_baseDiagrams.value(id, nullptr); return m_baseDiagrams.value(id, nullptr);
else if(funType == ModelFunctionType::RuntimeModel)
return m_monitorDiagrams.value(id, nullptr);
return nullptr; return nullptr;
} }

View File

@ -197,6 +197,66 @@ void BaseSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScen
} }
} }
} }
else if(sceneMode == DM_run){
if (event->button() != Qt::LeftButton)
return;
_model->activateModel(); //激活当前窗口
ms_ptMouseDown = event->scenePos();
ms_ptMouseLast = event->scenePos();
if(!m_bHoverOnHandel)
scene->callParentEvent(event); //此处是通过触发QGraphicsScene的事件函数来取消所有被选中item的选中状态
m_opMode = OM_none;
QList<QGraphicsItem *> items = scene->selectedItems();
if (items.count() == 1) //只有一个选中
{
GraphicsProjectModelItem* item = qgraphicsitem_cast<GraphicsProjectModelItem*>(items.first());
if(item)
{
GraphicsItemType tpe = item->getItemType();
if(tpe == GIT_link) //对象是连接线
{
m_opMode = OM_linkMove;
setCursor(scene, Qt::ArrowCursor);
emit setWorkingSelector(ST_linkMoving);
}
else
{
m_opMode = OM_move;
setCursor(scene, Qt::ClosedHandCursor);
emit setWorkingSelector(ST_moving);
}
}
}
else if (items.count() > 1) //选中多个
{
m_opMode = OM_move;
emit setWorkingSelector(ST_moving);
setCursor(scene, Qt::ClosedHandCursor);
}
if(m_opMode == OM_move) //可以多个选中同时移动
{
for(int n = 0; n < items.size(); n++)
{
//创建副本
GraphicsProjectModelItem* item = qgraphicsitem_cast<GraphicsProjectModelItem*>(items.at(n));
GraphicsItemType tpe = item->getItemType();
if(tpe == GIT_link)
continue;
item->createOperationCopy();
}
}
else if(m_opMode == OM_none)
{
QGraphicsView *view = scene->getView();
if(view)
view->setDragMode(QGraphicsView::RubberBandDrag);
}
}
} }
void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode)
@ -396,6 +456,19 @@ void BaseSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerSc
view->setDragMode(QGraphicsView::NoDrag); view->setDragMode(QGraphicsView::NoDrag);
} }
QList<QPair<QString,QUuid>> lst; //发送已选中的元件
QList<QGraphicsItem *> items = scene->selectedItems();
for(auto& pItem:items){
GraphicsProjectModelItem* item = qgraphicsitem_cast<GraphicsProjectModelItem*>(pItem);
if(item){
auto pPro = item->getProperty();
if(pPro){
lst.append(qMakePair(pPro->name(),pPro->uuid()));
}
}
}
emit _model->itemSelected(lst);
m_opMode = OM_none; m_opMode = OM_none;
m_bHoverOnHandel = false; m_bHoverOnHandel = false;
ms_nDragHandle = H_none; ms_nDragHandle = H_none;
@ -406,6 +479,22 @@ void BaseSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerSc
m_opMode = OM_none; m_opMode = OM_none;
scene->callParentEvent(event); scene->callParentEvent(event);
} }
else if(sceneMode == DM_run)
{
setCursor(scene, Qt::ArrowCursor);
if(m_opMode == OM_none)
{
QGraphicsView *view = scene->getView();
if(view)
view->setDragMode(QGraphicsView::NoDrag);
}
m_opMode = OM_none;
m_bHoverOnHandel = false;
ms_nDragHandle = H_none;
scene->callParentEvent(event);
}
} }
void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode)
@ -464,6 +553,26 @@ void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, Design
} }
} }
} }
else if(sceneMode == DM_run)
{
QList<QGraphicsItem *> items = scene->selectedItems();
if(items.count() == 1)
{
GraphicsProjectModelItem* item = qgraphicsitem_cast<GraphicsProjectModelItem*>(items.first());
if(item)
{
if(item->getItemType() == GIT_bay) //间隔暂时返回
return;
ModelProperty* pro = item->getProperty();
if(pro){
QString modelName = pro->modelName();
QUuid uuid = item->itemId();
_model->showModelDlg(modelName,uuid,item);
}
}
}
}
} }
void BaseSelector::dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode sceneMode) void BaseSelector::dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode sceneMode)

View File

@ -3,6 +3,7 @@
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QGraphicsView> #include <QGraphicsView>
#include <graphicsItem/graphicsBaseItem.h> #include <graphicsItem/graphicsBaseItem.h>
#include "baseProperty.h"
MovingSelector::MovingSelector(FixedPortsModel* model,QObject *parent) MovingSelector::MovingSelector(FixedPortsModel* model,QObject *parent)
: BaseSelector(model,parent) : BaseSelector(model,parent)
@ -41,13 +42,23 @@ void MovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerSce
void MovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) void MovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode)
{ {
QList<QPair<QString,QUuid>> lst; //发送已选中的元件
QList<QGraphicsItem *> items = scene->selectedItems(); QList<QGraphicsItem *> items = scene->selectedItems();
for(int n = 0; n < items.size(); n++) for(int n = 0; n < items.size(); n++)
{ {
AbstractShape* item = qgraphicsitem_cast<AbstractShape*>(items.at(n)); AbstractShape* item = qgraphicsitem_cast<AbstractShape*>(items.at(n));
if(item) if(item)
item->removeOperationCopy(); item->removeOperationCopy();
GraphicsProjectModelItem* p = qgraphicsitem_cast<GraphicsProjectModelItem*>(items.at(n));
if(p){
auto pPro = p->getProperty();
if(pPro){
lst.append(qMakePair(pPro->name(),pPro->uuid()));
}
}
} }
emit _model->itemSelected(lst);
updateConnectLineByTopology(items); updateConnectLineByTopology(items);

View File

@ -133,6 +133,13 @@ public:
QList<measureAttributeType> getMeasureAttributeTypes(); //获取所有量测属性 QList<measureAttributeType> getMeasureAttributeTypes(); //获取所有量测属性
/************************************运行模式(监控)*********************************************/
bool insertMonitor(QUuid uid,QString tag,QString name,QString parent,QJsonObject context);
QUuid getMonitorIdByName(QString name);
bool updateMonitor(QString tag,QJsonObject context);
QJsonObject getMonitorContextByTag(QString tag);
QList<monitorPageInfo> getAllMonitor();
public: public:
/***********************************editor编辑器**********************************************/ /***********************************editor编辑器**********************************************/
bool insertEditorProject(QUuid,QString,QString); bool insertEditorProject(QUuid,QString,QString);

View File

@ -2635,6 +2635,126 @@ QList<measureAttributeType> DataBase::getMeasureAttributeTypes() //暂时
return lst; return lst;
} }
/************************************运行模式*********************************************/
bool DataBase::insertMonitor(QUuid uid,QString tag,QString name,QString parent,QJsonObject context)
{
QString strSQL = "INSERT INTO diagramui_monitor_page(global_uuid, tag, name, parent, context) VALUES (?, ?, ?, ?, ?)";
QJsonDocument dataContext(context);
QString strContext = dataContext.toJson(QJsonDocument::Compact);
QVariantList params;
params.append(uid);
params.append(tag);
params.append(name);
params.append(parent);
params.append(strContext);
try
{
executeSQL(strSQL,false,params);
return true;
}
catch (const std::exception& e)
{
LOG_ERROR("DB", QString("Insert diagramui_monitor_page fail"));
return false;
}
}
QUuid DataBase::getMonitorIdByName(QString name)
{
QString strSQL = "SELECT global_uuid FROM diagramui_monitor_page WHERE tag = ?";
QVariantList params;
params.append(name);
try
{
QSqlQuery query = executeSQL(strSQL,false,params);
while (query.next())
{
return QUuid(query.value(0).toString());
}
}
catch (const std::exception& e)
{
}
return QUuid();
}
bool DataBase::updateMonitor(QString tag,QJsonObject context)
{
QString strSQL = "UPDATE diagramui_monitor_page SET context = ? WHERE tag = ?";
QVariantList params;
params.append(context);
params.append(tag);
try
{
executeSQL(strSQL,false,params);
return true;
}
catch (const std::exception& e)
{
LOG_ERROR("DB", QString("Update diagramui_monitor_page %1 fail").arg(tag));
return false;
}
}
QJsonObject DataBase::getMonitorContextByTag(QString tag)
{
QString strSQL = "SELECT context FROM diagramui_monitor_page WHERE tag = ?";
QVariantList params;
params.append(tag);
try
{
QSqlQuery query = executeSQL(strSQL,false,params);
while (query.next())
{
QString str = query.value(0).toString();
QJsonObject obj = QstringToJson(str);
return obj;
}
}
catch (const std::exception& e)
{
LOG_ERROR("DB", QString("SELECT diagramui_monitor_page %1 fail").arg(tag));
}
return QJsonObject();
}
QList<monitorPageInfo> DataBase::getAllMonitor()
{
QList<monitorPageInfo> lst;
QString strSQL = "SELECT id,global_uuid,tag,name,parent,context,ts FROM diagramui_monitor_page";
try
{
QSqlQuery query = executeSQL(strSQL);
while (query.next())
{
monitorPageInfo info;
info.id = query.value(0).toInt();
info.uid = QUuid(query.value(1).toString());
info.tag = query.value(2).toString();
info.name = query.value(3).toString();
info.parent = query.value(4).toString();
QString context = query.value(5).toString();
info.context = QstringToJson(context);
info.ts = query.value(6).toString();
lst.append(info);
}
query.clear();
return lst;
}
catch (const std::exception& e)
{
return lst;
}
}
bool DataBase::createDynamicTable(const QString &tableName, const QStringList &fields) bool DataBase::createDynamicTable(const QString &tableName, const QStringList &fields)
{ {
QString strSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " ("; QString strSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " (";

View File

@ -22,6 +22,8 @@ class projectModelDlg;
class TopologyView; class TopologyView;
class DiagramView; class DiagramView;
class CreateEditor; class CreateEditor;
class MonitorItemsDlg;
class MonitorPagesDlg;
class CMainWindow : public QMainWindow class CMainWindow : public QMainWindow
{ {
@ -78,5 +80,10 @@ private:
LoadPageDlg* m_pLoadPageDlg; LoadPageDlg* m_pLoadPageDlg;
projectModelDlg* m_pProjectModelDlg; projectModelDlg* m_pProjectModelDlg;
CreateEditor* m_pCreateEdiotr; CreateEditor* m_pCreateEdiotr;
MonitorItemsDlg* m_pMonitorItemsDlg;
MonitorPagesDlg* m_pMonitorPagesDlg;
QDockWidget* m_pMonitorItemsDock;
QDockWidget* m_pMonitorPagesDock;
QAction* _pActMonitor;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

37
include/monitorItemsDlg.h Normal file
View File

@ -0,0 +1,37 @@
#ifndef MONITORITEMSDLG_H
#define MONITORITEMSDLG_H
#include <QDialog>
#include "global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class monitorItemsDlg; }
QT_END_NAMESPACE
class MonitorItemsDlg : public QDialog
{
Q_OBJECT
public:
MonitorItemsDlg(QWidget *parent = nullptr);
~MonitorItemsDlg();
void initial();
signals:
void generateMonitor(QString,QList<QPair<QString,QUuid>>); //生成监控
public slots:
void onUpdateItems(QList<monitorRelationItem>,bool refresh); //更新当前设备列表
void onSelectItems(QList<QPair<QString,QUuid>>); //更新当前选中的设备
void onGenerateClicked();
void onMonitorCreated(QList<QPair<QString,QUuid>>); //创建后的设备列表
void onItemChanged(QStandardItem *item); //item勾选事件
private:
void resetSelect(); //重置选中
void setChildrenCheckState(QStandardItem *parent, Qt::CheckState state);
private:
Ui::monitorItemsDlg *ui;
QStandardItemModel* _modelAll; //图中所有item
QStandardItemModel* _modelSelect; //生成的item
};
#endif

35
include/monitorPagesDlg.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef MONITORPAGESDLG_H
#define MONITORPAGESDLG_H
#include <QDialog>
#include "global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class monitorPagesDlg; }
QT_END_NAMESPACE
class MonitorPagesDlg : public QDialog
{
Q_OBJECT
public:
MonitorPagesDlg(QWidget *parent = nullptr);
~MonitorPagesDlg();
void initial();
signals:
void monitorSelected(DiagramInfo);
void prepareSaveMonitor(QList<QPair<QString,QUuid>>);
public slots:
void onMonitorCreated(QString,QPair<QString,QUuid>,int);
void onItemClicked(const QModelIndex &index);
void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单
private:
QStandardItem* findTopLevelItem(const QString& name); //查找顶层项
private:
Ui::monitorPagesDlg *ui;
QStandardItemModel* _pModel;
};
#endif

View File

@ -76,7 +76,7 @@ void DiagramView::onIndexRbtnClicked(const QPoint &pos)
if (!index.isValid()) { if (!index.isValid()) {
// 如果点击的是空白区域,创建新组态图菜单 // 如果点击的是空白区域,创建新组态图菜单
QAction *addAction = new QAction("添加组态图", this); /* QAction *addAction = new QAction("添加组态图", this);
connect(addAction,&QAction::triggered,this,[&](){ connect(addAction,&QAction::triggered,this,[&](){
QVariant id = QUuid::createUuid(); QVariant id = QUuid::createUuid();
@ -94,7 +94,7 @@ void DiagramView::onIndexRbtnClicked(const QPoint &pos)
emit diagramCreate(info); emit diagramCreate(info);
}); });
menu.addAction(addAction); menu.addAction(addAction);*/
} }
else{ //目标组态图下添加子组态图 else{ //目标组态图下添加子组态图
QStandardItem* item = _pModel->itemFromIndex(index); QStandardItem* item = _pModel->itemFromIndex(index);
@ -102,7 +102,7 @@ void DiagramView::onIndexRbtnClicked(const QPoint &pos)
if(item) if(item)
{ {
QAction *addAction = new QAction("添加子组态图", this); /*QAction *addAction = new QAction("添加子组态图", this);
connect(addAction,&QAction::triggered,this,[&](){ connect(addAction,&QAction::triggered,this,[&](){
QVariant id = QUuid::createUuid(); QVariant id = QUuid::createUuid();
@ -121,7 +121,7 @@ void DiagramView::onIndexRbtnClicked(const QPoint &pos)
emit diagramCreate(info); emit diagramCreate(info);
}); });
menu.addAction(addAction); menu.addAction(addAction);*/
QAction *delAction = new QAction("删除", this); QAction *delAction = new QAction("删除", this);

View File

@ -1,6 +1,4 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "graphicsItem/graphicsItemGroup.h"
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include <QWidgetAction> #include <QWidgetAction>
@ -14,9 +12,9 @@
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QMessageBox> #include <QMessageBox>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QLibrary>
#include "diagramCavas.h" #include "diagramCavas.h"
#include "designerScene.h"
#include "graphicElementsPanel.h" #include "graphicElementsPanel.h"
#include "operationCommand.h" #include "operationCommand.h"
#include "electricElementsBox.h" #include "electricElementsBox.h"
@ -29,7 +27,8 @@
#include "createEditor.h" #include "createEditor.h"
#include "projectModelManager.h" #include "projectModelManager.h"
#include "projectManager.h" #include "projectManager.h"
#include <QLibrary> #include "monitorItemsDlg.h"
#include "monitorPagesDlg.h"
//using namespace ads; //using namespace ads;
@ -44,6 +43,11 @@ CMainWindow::CMainWindow(QWidget *parent)
m_pTopologyView = nullptr; m_pTopologyView = nullptr;
m_pDiagramView = nullptr; m_pDiagramView = nullptr;
m_pCreateEdiotr = nullptr; m_pCreateEdiotr = nullptr;
m_pMonitorItemsDlg = nullptr;
m_pMonitorPagesDlg = nullptr;
m_pMonitorItemsDock = nullptr;
m_pMonitorPagesDock = nullptr;
_pActMonitor = nullptr;
initializeDockUi(); initializeDockUi();
initializeAction(); initializeAction();
@ -97,6 +101,22 @@ void CMainWindow::initializeDockUi()
diagramDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); diagramDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
this->addDockWidget(Qt::LeftDockWidgetArea,diagramDock); this->addDockWidget(Qt::LeftDockWidgetArea,diagramDock);
m_pMonitorItemsDlg = new MonitorItemsDlg(this);
m_pMonitorItemsDock = new QDockWidget(QString::fromWCharArray(L"当前设备列表"),this);
m_pMonitorItemsDock->setWidget(m_pMonitorItemsDlg);
m_pMonitorItemsDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
this->addDockWidget(Qt::RightDockWidgetArea,m_pMonitorItemsDock);
m_pMonitorPagesDlg = new MonitorPagesDlg(this);
m_pMonitorPagesDock = new QDockWidget(QString::fromWCharArray(L"监控列表"),this);
m_pMonitorPagesDock->setWidget(m_pMonitorPagesDlg);
m_pMonitorPagesDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
m_pMonitorPagesDock->setMinimumSize(120,550);
this->addDockWidget(Qt::RightDockWidgetArea,m_pMonitorPagesDock);
m_pMonitorItemsDock->hide();
m_pMonitorPagesDock->hide();
m_pDiagramCavas = new DiagramCavas(); m_pDiagramCavas = new DiagramCavas();
m_pDiagramCavas->initial(); m_pDiagramCavas->initial();
this->setCentralWidget(m_pDiagramCavas); this->setCentralWidget(m_pDiagramCavas);
@ -135,11 +155,20 @@ void CMainWindow::initializeAction()
connect(m_pTopologyView,&TopologyView::entityDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteEntity); connect(m_pTopologyView,&TopologyView::entityDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteEntity);
connect(m_pTopologyView,&TopologyView::entitySelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectEntity); connect(m_pTopologyView,&TopologyView::entitySelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectEntity);
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);
connect(m_pDiagramView,&DiagramView::diagramDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteDiagram); connect(m_pDiagramView,&DiagramView::diagramDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteDiagram);
connect(m_pDiagramView,&DiagramView::diagramSelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectDiagram); connect(m_pDiagramView,&DiagramView::diagramSelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectDiagram);
connect(m_pDiagramView,&DiagramView::createProject,this,&CMainWindow::onAction_createEditor); connect(m_pDiagramView,&DiagramView::createProject,this,&CMainWindow::onAction_createEditor);
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_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);
connect(&ProjectManager::instance(),&ProjectManager::prepareUnloadProject,this,&CMainWindow::onAction_unloadEditor); connect(&ProjectManager::instance(),&ProjectManager::prepareUnloadProject,this,&CMainWindow::onAction_unloadEditor);
connect(m_pDiagramView,&DiagramView::loadProject,this,&CMainWindow::onSignal_loadProject); connect(m_pDiagramView,&DiagramView::loadProject,this,&CMainWindow::onSignal_loadProject);
@ -161,6 +190,23 @@ void CMainWindow::initializeAction()
QAction* actEdit = ui->menuProject->addAction(QString::fromWCharArray(L"编辑工程模")); QAction* actEdit = ui->menuProject->addAction(QString::fromWCharArray(L"编辑工程模"));
connect(actEdit,&QAction::triggered,this,&CMainWindow::onAction_editProject); connect(actEdit,&QAction::triggered,this,&CMainWindow::onAction_editProject);
ui->menuProject->addSeparator();
_pActMonitor = ui->menuProject->addAction(QString::fromWCharArray(L"管理监控"));
_pActMonitor->setCheckable(true);
connect(_pActMonitor,&QAction::triggered,this,[&](){
if(!_pActMonitor->isChecked()){
_pActMonitor->setChecked(false);
m_pMonitorItemsDock->hide();
m_pMonitorPagesDock->hide();
}
else{
_pActMonitor->setChecked(true);
m_pMonitorItemsDock->show();
m_pMonitorPagesDock->show();
}
});
QAction* testAct = ui->menuTest->addAction(QString::fromWCharArray(L"生成测试基模")); QAction* testAct = ui->menuTest->addAction(QString::fromWCharArray(L"生成测试基模"));
connect(testAct,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onCreateTestBaseModelDiagram); connect(testAct,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onCreateTestBaseModelDiagram);
} }

167
source/monitorItemsDlg.cpp Normal file
View File

@ -0,0 +1,167 @@
#include "monitorItemsDlg.h"
#include "ui_monitorItemsDlg.h"
#include "dataBase.h"
#include <QToolTip>
MonitorItemsDlg::MonitorItemsDlg(QWidget *parent)
: QDialog(parent)
, ui(new Ui::monitorItemsDlg)
,_modelAll(nullptr)
,_modelSelect(nullptr)
{
ui->setupUi(this);
initial();
}
MonitorItemsDlg::~MonitorItemsDlg()
{
delete ui;
}
void MonitorItemsDlg::initial()
{
_modelAll = new QStandardItemModel(this);
ui->treeView_all->setModel(_modelAll);
ui->treeView_all->setHeaderHidden(true);
_modelSelect = new QStandardItemModel(this);
ui->treeView_select->setModel(_modelSelect);
ui->treeView_select->setHeaderHidden(true);
ui->le_name->setPlaceholderText("输入名称");
connect(ui->btn_generate,&QPushButton::clicked,this,&MonitorItemsDlg::onGenerateClicked);
connect(_modelAll, &QStandardItemModel::itemChanged,this, &MonitorItemsDlg::onItemChanged);
}
void MonitorItemsDlg::onUpdateItems(QList<monitorRelationItem> lst,bool refresh)
{
if(refresh){
QStandardItem *root = _modelAll->invisibleRootItem();
int rowCount = root->rowCount();
if (rowCount > 0) {
_modelAll->removeRows(0, rowCount);
}
}
for(auto &info:lst){
auto curItem = info.item;
if(curItem.nCategory == 0){
if(curItem.nEquipType == 1 || curItem.nEquipType == 15 || curItem.nEquipType == 16){ //母线与变压器等间隔外设备并列第一层
QStandardItem *pItem = new QStandardItem(curItem.sName);
pItem->setCheckable(true); // 启用勾选框
pItem->setCheckState(Qt::Unchecked);
pItem->setData(curItem.nCategory,Qt::UserRole+1);
pItem->setData(curItem.nEquipType,Qt::UserRole+2);
pItem->setData(curItem.uid,Qt::UserRole+3);
for(auto& subInfo:info.subList){ //母线挂接间隔,变压器挂接设备
QStandardItem *pSub = new QStandardItem(subInfo.sName);
pSub->setCheckable(true); // 启用勾选框
pSub->setCheckState(Qt::Unchecked);
pSub->setData(subInfo.nCategory,Qt::UserRole+1);
pSub->setData(subInfo.nEquipType,Qt::UserRole+2);
pSub->setData(subInfo.uid,Qt::UserRole+3);
pItem->appendRow(pSub);
}
_modelAll->appendRow(pItem);
}
else{ //其他设备挂接在母线下的间隔中
if(!info.parent.sName.isEmpty()){ //有父,在间隔内
QStandardItem *pItem = new QStandardItem(curItem.sName);
pItem->setCheckable(true); // 启用勾选框
pItem->setCheckState(Qt::Unchecked);
pItem->setData(curItem.nCategory,Qt::UserRole+1);
pItem->setData(curItem.nEquipType,Qt::UserRole+2);
pItem->setData(curItem.uid,Qt::UserRole+3);
auto pParent = findStandardItemAtLevel(_modelAll,1,info.parent.sName,nullptr,0); //查找父间隔所在item
if(pParent){
pParent->appendRow(pItem);
}
}
}
}
}
ui->treeView_all->expandAll();
}
void MonitorItemsDlg::onSelectItems(QList<QPair<QString,QUuid>> lst)
{
ui->stackedWidget->setCurrentIndex(0);
/*resetSelect();
for(auto& info:lst){
for(int i = 0;i < ui->listWidget_all->count();++i){
QListWidgetItem *item = ui->listWidget_all->item(i);
QUuid uid = item->data(Qt::UserRole).toUuid();
if(uid == info.second){ //设置选中
item->setCheckState(Qt::Checked);
continue;
}
}
}*/
}
void MonitorItemsDlg::onGenerateClicked()
{
QString sName = ui->le_name->text();
if (sName.isEmpty()) {
ui->le_name->setFocus();
return;
}
/*QList<QPair<QString,QUuid>> lst;
for (int i = 0; i < ui->listWidget_all->count(); ++i) {
QListWidgetItem *item = ui->listWidget_all->item(i);
// 处理每个项
if(item->checkState() == Qt::Checked){
QString text = item->text();
QUuid uid = item->data(Qt::UserRole).toUuid();
lst.append(qMakePair(text,uid));
}
}
emit generateMonitor(sName,lst);*/
}
void MonitorItemsDlg::onMonitorCreated(QList<QPair<QString,QUuid>> lst)
{
/*ui->stackedWidget->setCurrentIndex(1);
ui->listWidget_select->clear();
for(auto& pair:lst){
QListWidgetItem *item = new QListWidgetItem(pair.first);
item->setData(Qt::UserRole,pair.second);
ui->listWidget_select->addItem(item);
}*/
}
void MonitorItemsDlg::onItemChanged(QStandardItem *item)
{
QSignalBlocker blocker(_modelAll);
if (item->isCheckable()) {
Qt::CheckState newState = item->checkState();
// 设置所有子项与父项相同的状态
setChildrenCheckState(item, newState);
}
ui->treeView_all->repaint();
}
void MonitorItemsDlg::setChildrenCheckState(QStandardItem *parent, Qt::CheckState state) {
for (int row = 0; row < parent->rowCount(); ++row) {
QStandardItem *child = parent->child(row, 0); // 第一列
if (child && child->isCheckable()) {
child->setCheckState(state);
setChildrenCheckState(child, state);
}
}
}
void MonitorItemsDlg::resetSelect()
{
/*for(int i = 0;i < ui->listWidget_all->count();++i){
QListWidgetItem *item = ui->listWidget_all->item(i);
item->setCheckState(Qt::Unchecked);
}*/
}

125
source/monitorPagesDlg.cpp Normal file
View File

@ -0,0 +1,125 @@
#include "monitorPagesDlg.h"
#include "ui_monitorPagesDlg.h"
#include <QMenu>
#include "dataBase.h"
#include "tools.h"
MonitorPagesDlg::MonitorPagesDlg(QWidget *parent)
: QDialog(parent)
, ui(new Ui::monitorPagesDlg)
,_pModel(nullptr)
{
ui->setupUi(this);
initial();
}
MonitorPagesDlg::~MonitorPagesDlg()
{
delete ui;
}
void MonitorPagesDlg::initial()
{
_pModel = new QStandardItemModel(this);
ui->treeView->setModel(_pModel);
ui->treeView->setHeaderHidden(true);
connect(ui->treeView, &QTreeView::clicked, this, &MonitorPagesDlg::onItemClicked);
}
void MonitorPagesDlg::onMonitorCreated(QString sProj,QPair<QString,QUuid> pair,int nMode)
{
QStandardItem* topLevelItem = findTopLevelItem(sProj);
if (topLevelItem) {
// 如果存在,直接在该项下插入子项
QStandardItem* childItem = new QStandardItem(pair.first);
childItem->setData(pair.second);
topLevelItem->appendRow(childItem);
} else {
// 如果不存在,创建新的顶层项并插入子项
QStandardItem* newTopLevelItem = new QStandardItem(sProj);
QStandardItem* childItem = new QStandardItem(pair.first);
childItem->setData(pair.second);
newTopLevelItem->appendRow(childItem);
_pModel->appendRow(newTopLevelItem);
}
ui->treeView->expandAll();
}
void MonitorPagesDlg::onItemClicked(const QModelIndex &index)
{
QStandardItem* item = _pModel->itemFromIndex(index);
int nLevel = getLevel(item);
if(nLevel == 0) //顶层不响应
return;
QStandardItem* parent = item->parent();
if(item)
{
DiagramInfo info;
info.id = item->data(Qt::UserRole+1).toUuid();
info.sName = item->text();
emit monitorSelected(info);
}
}
void MonitorPagesDlg::onIndexRbtnClicked(const QPoint &pos)
{
// 获取当前点击的位置对应的索引
QMenu menu;
QModelIndex index = ui->treeView->indexAt(pos);
if (!index.isValid()) {
return;
}
else{ //目标组态图下添加子组态图
QStandardItem* item = _pModel->itemFromIndex(index);
if(item){
int nLevel = getLevel(item);
if(nLevel == 0){
QAction *allSaveAction = new QAction("全部保存", this);
connect(allSaveAction,&QAction::triggered,this,[&](){
QList<QPair<QString,QUuid>> lstInfo;
auto lstItem = getAllChildren(item);
for(auto& subItem:lstItem){
QString sName = subItem->text();
QUuid uid = subItem->data().toUuid();
lstInfo.append(qMakePair(sName,uid));
}
emit prepareSaveMonitor(lstInfo);
});
menu.addAction(allSaveAction);
}
else if(nLevel == 1){
QAction *saveAction = new QAction("保存", this);
connect(saveAction,&QAction::triggered,this,[&](){
QList<QPair<QString,QUuid>> lstInfo;
QString sName = item->text();
QUuid uid = item->data().toUuid();
lstInfo.append(qMakePair(sName,uid));
emit prepareSaveMonitor(lstInfo);
});
menu.addAction(saveAction);
}
}
}
// 在点击位置显示菜单
menu.exec(ui->treeView->mapToGlobal(pos));
}
QStandardItem* MonitorPagesDlg::findTopLevelItem(const QString& name)
{
for (int i = 0; i < _pModel->rowCount(); ++i) {
QStandardItem* item = _pModel->item(i);
if (item && item->text() == name) {
return item;
}
}
return nullptr;
}

84
ui/monitorItemsDlg.ui Normal file
View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>monitorItemsDlg</class>
<widget class="QDialog" name="monitorItemsDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>182</width>
<height>446</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_allItem">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLineEdit" name="le_name"/>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btn_generate">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>生成监控</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QTreeView" name="treeView_all"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_selectedItem">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeView" name="treeView_select"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

24
ui/monitorPagesDlg.ui Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>monitorPagesDlg</class>
<widget class="QDialog" name="monitorPagesDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>182</width>
<height>427</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTreeView" name="treeView"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>