diff --git a/common/include/baseProperty.h b/common/include/baseProperty.h index f82c072..077452a 100644 --- a/common/include/baseProperty.h +++ b/common/include/baseProperty.h @@ -102,7 +102,10 @@ public: QString zone() const {return sZone;} void setStation(const QString& s) {sStation = s;} QString station() const {return sStation;} - + void setSourceItemId(const QString& s) {sSourceItemId = s;} + QString getSourceItemId() {return sSourceItemId;} + void setMeasurement(QMap map) {mMeasurement = map;} + auto getMeasurement() {return mMeasurement;} protected: QString sPath; QString sDescription; @@ -114,7 +117,8 @@ protected: int nStatus; QJsonObject jConnectedBus; QJsonObject jLabel; - + QString sSourceItemId; //被哪个对象生成 + QMap mMeasurement; //量测 }; typedef QMap VariableMap; //属性名,值 diff --git a/common/include/global.h b/common/include/global.h index 53467e6..a0cd4c5 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -338,6 +338,11 @@ struct propertyContentInfo //单个属性结构 QWidget* proEditer = NULL; //编辑窗口对象 }; +struct measureAttributeType //量测可用属性类型(从基模获取的占位符变量) +{ + QString tag; + QString name; +}; //==================组态拓扑结构====================== enum class DataState { @@ -549,6 +554,16 @@ struct CtExtraInfo QString secondaryLoadCapacity; //二次负载容量 }; +struct MeasurementInfo //量测 +{ + QString tag; //量测tag + QString name; //量测名称 + QString equipment; //设备名称 + QString channel; //设备端子 + QString type; //量测类型 + int size; //量测size +}; + //================================================== struct baseComponentInfo //基模图元数据 { diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index 53f1dd2..58146d0 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -18,6 +18,10 @@ set(DIAGRAMCAVAS_HEADER_FILES include/baseContentDlg.h include/ptExtraInfoDlg.h include/ctExtraInfoDlg.h + include/bayInfoDlg.h + include/bayManagerDlg.h + include/bayManagerContentDlg.h + include/measureSettingDlg.h include/projectModelSetting.h include/projectDiagramNameInput.h include/diagramEditor/editPanel.h @@ -83,6 +87,10 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/baseContentDlg.cpp source/ptExtraInfoDlg.cpp source/ctExtraInfoDlg.cpp + source/bayInfoDlg.cpp + source/bayManagerDlg.cpp + source/bayManagerContentDlg.cpp + source/measureSettingDlg.cpp source/projectModelSetting.cpp source/projectDiagramNameInput.cpp source/diagramEditor/editPanel.cpp @@ -137,6 +145,10 @@ set(UI_FILES ui/diagramEditorWizard.ui ui/projectModelSetting.ui ui/projectDiagramNameInput.ui + ui/bayInfoDlg.ui + ui/measureSettingDlg.ui + ui/bayManagerDlg.ui + ui/bayManagerContentDlg.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/diagramCavas/include/baseContentDlg.h b/diagramCavas/include/baseContentDlg.h index 72d2549..1abda84 100644 --- a/diagramCavas/include/baseContentDlg.h +++ b/diagramCavas/include/baseContentDlg.h @@ -10,6 +10,7 @@ ********************************************************/ class BaseProperty; +class FixedPortsModel; class BaseContentDlg : public QDialog { @@ -23,9 +24,12 @@ public: //void setPropertyValue(QMap); //void setPropertyValue(BaseProperty*); virtual void setPropertyValue(QVariant) = 0; + void setModelController(FixedPortsModel* p){_curModelController = p;} + auto getModelController() {return _curModelController;} protected: QMap _mapPro; QFormLayout* createFormLayout(QWidget* parent); + FixedPortsModel* _curModelController; }; #endif diff --git a/diagramCavas/include/bayInfoDlg.h b/diagramCavas/include/bayInfoDlg.h new file mode 100644 index 0000000..c6beb39 --- /dev/null +++ b/diagramCavas/include/bayInfoDlg.h @@ -0,0 +1,41 @@ +#ifndef BAYINFODLG_H +#define BAYINFODLG_H + +#include +#include "baseContentDlg.h" +#include "global.h" +/******************************************************* + 间隔信息 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class bayInfoDlg; } +QT_END_NAMESPACE + +class MeasureSettingDlg; + +class BayInfoDlg : public BaseContentDlg +{ + Q_OBJECT +public: + BayInfoDlg(QWidget *parent = nullptr); + virtual ~BayInfoDlg(); + virtual void createGroupView(groupStateInfo); + virtual QMap getPropertyValue(BaseProperty* = nullptr); //返回当前页面的属性值 + virtual void setPropertyValue(QVariant); + auto& getValidType() {return _validType;} //获取可用的量测属性 + void setUi(); + void addMeasure(MeasurementInfo); +public slots: + void onAddClicked(); + void onDeleteClicked(); + void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单 +private: + void initial(); +private: + Ui::bayInfoDlg *ui; + MeasureSettingDlg* _measureDlg; + QList _validType; //可用的属性列表 + QMap _mapMeasure; //量测列表 +}; + +#endif diff --git a/diagramCavas/include/bayManagerContentDlg.h b/diagramCavas/include/bayManagerContentDlg.h new file mode 100644 index 0000000..4f47156 --- /dev/null +++ b/diagramCavas/include/bayManagerContentDlg.h @@ -0,0 +1,27 @@ +#ifndef BAYMANAGERCONTENTDLG_H +#define BAYMANAGERCONTENTDLG_H + +#include +/******************************************************* + 间隔内容 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class bayManagerContentDlg; } +QT_END_NAMESPACE + +class BayManagerContentDlg : public QDialog +{ + Q_OBJECT +public: + BayManagerContentDlg(QWidget *parent = nullptr); + ~BayManagerContentDlg(); + + void initial(); + void setName(const QString& s) {_sBayName = s;} + QString name() {return _sBayName;} +private: + Ui::bayManagerContentDlg *ui; + QString _sBayName; //每页的间隔名称 +}; + +#endif diff --git a/diagramCavas/include/bayManagerDlg.h b/diagramCavas/include/bayManagerDlg.h new file mode 100644 index 0000000..f8f431f --- /dev/null +++ b/diagramCavas/include/bayManagerDlg.h @@ -0,0 +1,34 @@ +#ifndef BAYMANAGERDLG_H +#define BAYMANAGERDLG_H + +#include +/******************************************************* + 间隔管理 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class bayManagerDlg; } +QT_END_NAMESPACE + +class BayManagerContentDlg; + +class BayManagerDlg : public QDialog +{ + Q_OBJECT +public: + BayManagerDlg(QWidget *parent = nullptr); + ~BayManagerDlg(); + + void initial(); + void showDlg(); + void clearData(); //切换打开文件时调用 +public slots: + void onOkClicked(); + void onCancelClicked(); +private: + void generatePage(QStringList); //生成间隔页 <间隔列表> +private: + Ui::bayManagerDlg *ui; + QMap _contentData; // +}; + +#endif diff --git a/diagramCavas/include/drawingPanel.h b/diagramCavas/include/drawingPanel.h index 11818bc..b7c43a0 100644 --- a/diagramCavas/include/drawingPanel.h +++ b/diagramCavas/include/drawingPanel.h @@ -40,7 +40,7 @@ public: void setPageName(QString s){_name = s;_pModel->setPageName(_name);} //设置当前page名称 QString pageName(){return _name;} - FixedPortsModel* getModel() const {return _pModel;} + FixedPortsModel* getModelController() const {return _pModel;} DiagramMode getMode(){return _mode;} QJsonObject getDiagramInfo() const; //返回图元位置信息 diff --git a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h index c5d98c7..a979c68 100644 --- a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h +++ b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h @@ -36,6 +36,7 @@ public: QMap& allItems(); bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*); void addNodeItem(QUuid id,/*int type,*/QPointF pos); + GraphicsProjectModelItem* nodeItem(QUuid uuid); QVariant nodeData(QUuid nodeId, NodeRole role) const; BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据,一个data可对应多个item(id,类型,名称,工程模名) void loadNodeDataFromDataBase(); //从数据库加载数据 @@ -85,6 +86,7 @@ public Q_SLOTS: void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在 void onTimeOut(); void onSignal_GetPointData(QString type,QMap map); + void onSignal_generateDiagram(const QString&); //生成工程组态信号 private: QMap _nodeItem; //工程模对象 diff --git a/diagramCavas/include/graphicsItem/graphicsBaseItem.h b/diagramCavas/include/graphicsItem/graphicsBaseItem.h index 8f7e9dc..7a4098c 100644 --- a/diagramCavas/include/graphicsItem/graphicsBaseItem.h +++ b/diagramCavas/include/graphicsItem/graphicsBaseItem.h @@ -41,29 +41,11 @@ public: m_dWidth = m_dHeight = 0; m_pOperationCopy = nullptr; m_dSyncRotationByParent = 0.0; - m_touched = false; } virtual ~AbstractShapeType() { - /*for (size_t i = 0; i < m_vecHanle.size(); i++) - { - ItemControlHandle* pHandle = m_vecHanle[i]; - if (pHandle) - { - delete pHandle; - pHandle = nullptr; - } - }*/ - foreach (int key, m_vecHanle.keys()) - { - ItemControlHandle* pHandle = m_vecHanle.value(key); - if (pHandle) - { - delete pHandle; - pHandle = nullptr; - } - } + } public: @@ -93,15 +75,77 @@ public: updateCoordinate(); } + //操作副本相关 + virtual void createOperationCopy() {} + virtual void removeOperationCopy() {} + virtual void moveOperationCopy(const QPointF&) {} + virtual void rotateOperationCopy(const double&) {} + + virtual void resize(int,double, double, const QPointF&) {} + virtual void move(const QPointF&) {} + virtual void editShape(int, const QPointF&) {} + + virtual void updateCoordinate() {} + + virtual QRectF boundingRect() const { return m_boundingRect; } + virtual QPainterPath shape() + { + QPainterPath path; + return path; + } + + virtual void syncRotationDataFromParent(const double&) {} + virtual double getSyncRotationDataFromParent() {return m_dSyncRotationByParent;} +protected: + ShapeType m_type; + QPen m_pen; + QBrush m_brush; + double m_dWidth; + double m_dHeight; + QRectF m_boundingRect; + + double m_dSyncRotationByParent; //父项(被加入到某一组)的旋转数据,因为加入某一组后,对该组进行旋转,自身的旋转数据不会同步更新 + QGraphicsPathItem* m_pOperationCopy; //图元移动和旋转时的操作副本 + QPointF m_movingIniPos; //移动副本开始移动初始 +}; + +class ItemPort; +class ModelProperty; +class PowerEntity; + +typedef AbstractShapeType AbstractShape; + +class GraphicsBaseItem :public QObject, public AbstractShapeType +{ + Q_OBJECT + public: + GraphicsBaseItem(QGraphicsItem *parent); + virtual ~GraphicsBaseItem(); +public: + virtual QUuid itemId() const {return m_itemId;} + virtual void setItemId(QUuid n){m_itemId = n;} + virtual int addPort(PortState typ,QPointF vec,QString id = "",HandleType hType = T_lineInOut,PortPos pos = P_top); //新建,返回-1失败 + virtual void setEntity(PowerEntity*); //设置当前图元的拓扑数据 + virtual PowerEntity* entity(); + virtual void setProperty(ModelProperty* p); + virtual ModelProperty* getProperty() {return _property;} + virtual void updateByProperty(){}; //使用data对象更新自己 + virtual void setItemChanged(bool b){_itemChanged = b;} + virtual bool itemChanged() const {return _itemChanged;} + virtual void setItemType(GraphicsItemType type){m_Itemtype = type;} + virtual GraphicsItemType getItemType() const {return m_Itemtype;} + virtual void renderSelectBackground(QPainter*); + virtual ItemPort* getPortById(QString) const; + virtual ItemPort* getPortPtr(int) const; + virtual ItemControlHandle* getHandlePtr(int) const; + virtual QMap getPorts() {return m_mapPort;} + //virtual GraphicsBaseItem* + virtual void initialPortsByDatabase(); //从数据库初始化port信息 + virtual void setLastPoint(QPointF p) {m_lastPoint = p;} + virtual void setTouched(bool b){m_touched = b;} + int collidesWithHandle(const QPointF& point) { - /*for(auto it = m_vecHanle.begin(); it != m_vecHanle.end(); it++) - { - QPointF pt = (*it)->mapFromScene(point); - if((*it)->contains(pt)) - return (*it)->getTag(); - }*/ - foreach (int key, m_vecHanle.keys()) { ItemControlHandle* pHandle = m_vecHanle.value(key); @@ -118,32 +162,11 @@ public: return HandleTag::H_none; } - //操作副本相关 - virtual void createOperationCopy() {} - virtual void removeOperationCopy() {} - virtual void moveOperationCopy(const QPointF&) {} - virtual void rotateOperationCopy(const double&) {} - - virtual void resize(int,double, double, const QPointF&) {} - virtual void move(const QPointF&) {} - virtual void editShape(int, const QPointF&) {} - - virtual void updateCoordinate() {} - //handle相关 virtual int handleCount() { return m_vecHanle.count(); } virtual ItemControlHandle* getHandle(int nHandle) { ItemControlHandle* handle = nullptr; - /*for(auto it = m_vecHanle.begin(); it != m_vecHanle.end(); it++) - { - if((*it)->getTag() == nHandle) - { - handle = (*it); - return handle; - } - }*/ - foreach (int key, m_vecHanle.keys()) { ItemControlHandle* pHandle = m_vecHanle.value(key); @@ -160,14 +183,6 @@ public: } virtual void setHandleVisible(bool bVisible) { - /*for(auto it = m_vecHanle.begin(); it != m_vecHanle.end(); it++) - { - if(bVisible) - (*it)->show(); - else - (*it)->hide(); - }*/ - foreach (int key, m_vecHanle.keys()) { ItemControlHandle* pHandle = m_vecHanle.value(key); @@ -404,70 +419,6 @@ public: double dParam = dWidth > dHeight ? (dDiagonal-dWidth*0.5):(dDiagonal-dHeight*0.5); m_boundingRect_selected = boundRect.adjusted(-dParam-nMargin, -dParam-nMargin, dParam+nMargin, dParam+nMargin); } - - virtual QRectF boundingRect() const { return m_boundingRect; } - virtual QPainterPath shape() - { - QPainterPath path; - return path; - } - - virtual void syncRotationDataFromParent(const double&) {} - virtual double getSyncRotationDataFromParent() {return m_dSyncRotationByParent;} - virtual void setTouched(bool b){m_touched = b;} - virtual void setLastPoint(QPointF p) {m_lastPoint = p;} -protected: - ShapeType m_type; - QPen m_pen; - QBrush m_brush; - double m_dWidth; - double m_dHeight; - QRectF m_boundingRect; - QRectF m_boundingRect_selected; //选中矩形框 - bool m_touched; //被触碰状态 - - double m_dSyncRotationByParent; //父项(被加入到某一组)的旋转数据,因为加入某一组后,对该组进行旋转,自身的旋转数据不会同步更新 - - QGraphicsPathItem* m_pOperationCopy; //图元移动和旋转时的操作副本 - QPointF m_movingIniPos; //移动副本开始移动初始 - QPointF m_lastPoint; //鼠标上次点击位置 - - QMap m_vecHanle; -}; - -class ItemPort; -//class BaseProperty; -class ModelProperty; -class PowerEntity; - -typedef AbstractShapeType AbstractShape; - -class GraphicsBaseItem :public QObject, public AbstractShapeType -{ - Q_OBJECT - public: - GraphicsBaseItem(QGraphicsItem *parent); - virtual ~GraphicsBaseItem(); -public: - virtual QUuid itemId() const {return m_itemId;} - virtual void setItemId(QUuid n){m_itemId = n;} - virtual int addPort(PortState typ,QPointF vec,QString id = "",HandleType hType = T_lineInOut,PortPos pos = P_top); //新建,返回-1失败 - virtual void setEntity(PowerEntity*); //设置当前图元的拓扑数据 - virtual PowerEntity* entity(); - virtual void setProperty(ModelProperty* p); - virtual ModelProperty* getProperty() {return _property;} - virtual void updateByProperty(){}; //使用data对象更新自己 - virtual void setItemChanged(bool b){_itemChanged = b;} - virtual bool itemChanged() const {return _itemChanged;} - virtual void setItemType(GraphicsItemType type){m_Itemtype = type;} - virtual GraphicsItemType getItemType() const {return m_Itemtype;} - virtual void renderSelectBackground(QPainter*); - virtual ItemPort* getPortById(QString) const; - virtual ItemPort* getPortPtr(int) const; - virtual ItemControlHandle* getHandlePtr(int) const; - virtual QMap getPorts() {return m_mapPort;} - //virtual GraphicsBaseItem* - virtual void initialPortsByDatabase(); //从数据库初始化port信息 public slots: void onUpdateData(); //data发送的更新通知 protected: @@ -477,6 +428,11 @@ protected: PowerEntity* _pEntity; //图元拓扑 bool _itemChanged; //图元变化标志,判断是否需要保存 QMap m_mapPort; //单独存放port + + QMap m_vecHanle; + QPointF m_lastPoint; //鼠标上次点击位置 + bool m_touched; //被触碰状态 + QRectF m_boundingRect_selected; //选中矩形框 }; class GraphicsBaseModelItem : public GraphicsBaseItem //基模item @@ -536,7 +492,6 @@ protected: QPointF m_endConnectPoint; int _lastPort; //最后触碰的port QString _modelName; //当前图元使用的模型名,用来在model中检索属性信息 - }; #endif diff --git a/diagramCavas/include/graphicsItem/itemPort.h b/diagramCavas/include/graphicsItem/itemPort.h index b15da57..6246a3d 100644 --- a/diagramCavas/include/graphicsItem/itemPort.h +++ b/diagramCavas/include/graphicsItem/itemPort.h @@ -24,6 +24,8 @@ public: QString getId() {return _uuid;} void setName(const QString& str) {_name = str;} QString getName() const {return _name;} + void setSourcePortId(const QString& id) {_sourcePortId = id;} + QString getSourcePortId() {return _sourcePortId;} protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; @@ -32,6 +34,7 @@ private: QString _name; PortPos _pos; ElectricConnectLineItem* _ptr; + QString _sourcePortId; //被哪个port生成 }; #endif diff --git a/diagramCavas/include/itemPropertyDlg.h b/diagramCavas/include/itemPropertyDlg.h index c71d89a..2a1caeb 100644 --- a/diagramCavas/include/itemPropertyDlg.h +++ b/diagramCavas/include/itemPropertyDlg.h @@ -12,18 +12,7 @@ namespace Ui { class itemPropertyDlg; } QT_END_NAMESPACE class GraphicsProjectModelItem; - -struct PropertyInfo -{ - double resistance = 0; //电阻 DEFAULT 2, - bool anchor_v = false; //是否锚定电压 DEFAULT FALSE, - double uv_alarm = 0; //电压下限 DEFAULT 90, - double ov_alarm = 0; //电压上限 DEFAULT 110, - bool anchor_i = false; //是否锚定电流 DEFAULT FALSE, - double ui_alarm = 0; //电流下限 DEFAULT 45, - double oi_alarm = 0; //电流上限 DEFAULT 55, -}; -Q_DECLARE_METATYPE(PropertyInfo); +class FixedPortsModel; class ItemPropertyDlg : public QDialog { @@ -37,8 +26,8 @@ public: void loadGroupButton(QMap); //加载属性组列表 void createGroupView(const QString&); //创建属性页 void showDlg(modelDataInfo,QUuid,GraphicsProjectModelItem*); //显示属性页面 -signals: - void PropertyChange(const PropertyInfo); + void setModelController(FixedPortsModel* p) {_curModelController = p;} + auto getModelController() {return _curModelController;} public slots: void onOkClicked(); void onCancelClicked(); @@ -56,6 +45,7 @@ private: QUuid curUuid_; //当前显示对象的uuid QString _curModel; //当前模型名 GraphicsProjectModelItem* _curItem; + FixedPortsModel* _curModelController; }; #endif diff --git a/diagramCavas/include/measureSettingDlg.h b/diagramCavas/include/measureSettingDlg.h new file mode 100644 index 0000000..e55110d --- /dev/null +++ b/diagramCavas/include/measureSettingDlg.h @@ -0,0 +1,36 @@ +#ifndef MEASURESETTINGDLG_H +#define MEASURESETTINGDLG_H + +#include +/******************************************************* + 间隔信息 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class measureSettingDlg; } +QT_END_NAMESPACE + +class BayInfoDlg; + +class MeasureSettingDlg : public QDialog +{ + Q_OBJECT +public: + MeasureSettingDlg(QWidget *parent = nullptr); + ~MeasureSettingDlg(); + + void initial(); + void setBay(BayInfoDlg* p) {_pBay = p;} + void showDlg(); +public slots: + void onOkClicked(); + void onCancelClicked(); + void onTagChanged(const QString&); + void onNameChanged(const QString&); +private: + void clearData(); +private: + Ui::measureSettingDlg *ui; + BayInfoDlg* _pBay; +}; + +#endif diff --git a/diagramCavas/include/projectDiagramNameInput.h b/diagramCavas/include/projectDiagramNameInput.h index 539bff8..abc44c3 100644 --- a/diagramCavas/include/projectDiagramNameInput.h +++ b/diagramCavas/include/projectDiagramNameInput.h @@ -18,6 +18,8 @@ public: void initial(); void setModel(FixedPortsModel* p) {_model = p;} +signals: + void onGenerateClicked(const QString&); public slots: void onOkClicked(); void onCancelClicked(); diff --git a/diagramCavas/source/baseContentDlg.cpp b/diagramCavas/source/baseContentDlg.cpp index 3569d92..e80fb15 100644 --- a/diagramCavas/source/baseContentDlg.cpp +++ b/diagramCavas/source/baseContentDlg.cpp @@ -8,6 +8,7 @@ BaseContentDlg::BaseContentDlg(QWidget *parent) : QDialog(parent) + ,_curModelController(nullptr) { setWindowFlags(Qt::Widget); //this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); diff --git a/diagramCavas/source/baseModelItem/electricBaseModelSvgBus.cpp b/diagramCavas/source/baseModelItem/electricBaseModelSvgBus.cpp index b35db77..8c72a17 100644 --- a/diagramCavas/source/baseModelItem/electricBaseModelSvgBus.cpp +++ b/diagramCavas/source/baseModelItem/electricBaseModelSvgBus.cpp @@ -8,7 +8,7 @@ ElectricBaseModelSvgBus::ElectricBaseModelSvgBus(const QRect &rect, QGraphicsItem *parent) : ElectricBaseModelSvgItem(rect,parent) { - loadSvg(":/images/element/svg_bus.svg"); + //loadSvg(":/images/element/svg_bus.svg"); setHandleIfShow(H_textCaption,false); setHandleVisible(false); setFunctionHandleIfShow(false); diff --git a/diagramCavas/source/bayInfoDlg.cpp b/diagramCavas/source/bayInfoDlg.cpp new file mode 100644 index 0000000..d3be673 --- /dev/null +++ b/diagramCavas/source/bayInfoDlg.cpp @@ -0,0 +1,187 @@ +#include +#include +#include +#include +#include "bayInfoDlg.h" +#include "ui_bayInfoDlg.h" +#include "baseProperty.h" +#include "basePropertyManager.h" +#include "measureSettingDlg.h" +#include "dataBase.h" + +BayInfoDlg::BayInfoDlg(QWidget *parent) + : BaseContentDlg(parent) + , ui(new Ui::bayInfoDlg) + ,_measureDlg(nullptr) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + initial(); +} + +BayInfoDlg::~BayInfoDlg() +{ + delete ui; +} + +void BayInfoDlg::initial() +{ + setUi(); + connect(ui->btn_add,&QPushButton::clicked,this,&BayInfoDlg::onAddClicked); + connect(ui->tableWidget_local, &QTableWidget::customContextMenuRequested, this, &BayInfoDlg::onIndexRbtnClicked); +} + +void BayInfoDlg::createGroupView(groupStateInfo infos) +{ + for(auto& info:infos.info) { + propertyContentInfo inf; + inf.proName = info.name; + inf.proType = info.type; + _mapPro.insert(info.name,inf); + } +} + +QMap BayInfoDlg::getPropertyValue(BaseProperty* pPro) +{ + QMap map; + + pPro->setMeasurement(_mapMeasure); + return map; +} + +void BayInfoDlg::setPropertyValue(QVariant var) +{ + BaseProperty* pPro = static_cast(var.value()); + if(pPro) + { + QList lstType = DataBase::GetInstance()->getMeasureAttributeTypes(); + auto map = pPro->getMeasurement(); + + /*QMutableListIterator it(lstType); + while(it.hasNext()){ //设置可用属性 + if(map.contains(it.next().name)){ + it.remove(); + } + }*/ + _validType = lstType; + + ui->tableWidget_local->clearContents(); //清空列表 + for(auto& info:map){ + addMeasure(info); + } + } +} + + +void BayInfoDlg::setUi() +{ + QStringList headerText; + headerText<<"TAG"<<"名称"<<"设备"<<"端子"<<"类型"<<"SIZE"; + ui->tableWidget_local->setContextMenuPolicy(Qt::CustomContextMenu); + ui->tableWidget_local->setSelectionMode(QAbstractItemView::SingleSelection); + ui->tableWidget_local->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->tableWidget_local->setColumnCount(headerText.count()); + ui->tableWidget_local->setHorizontalHeaderLabels(headerText); + ui->tableWidget_local->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->tableWidget_local->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui->tableWidget_local->setStyleSheet( + "QTableWidget::item {" + " padding: 5px;" // 可选:增加内边距 + " white-space: pre-wrap;" // 关键:保留空白符并允许自动换行 + "}" + ); +} + +void BayInfoDlg::addMeasure(MeasurementInfo info) +{ + if(_mapMeasure.contains(info.name)) + return; + int row = ui->tableWidget_local->rowCount(); + ui->tableWidget_local->insertRow(row); + + QTableWidgetItem* tagItem = new QTableWidgetItem(info.tag); + ui->tableWidget_local->setItem(row, 0, tagItem); + + QTableWidgetItem* nameItem = new QTableWidgetItem(info.name); + ui->tableWidget_local->setItem(row, 1, nameItem); + + QTableWidgetItem* deviceItem = new QTableWidgetItem(info.equipment); + ui->tableWidget_local->setItem(row, 2, deviceItem); + + QTableWidgetItem* channelItem = new QTableWidgetItem(info.channel); + ui->tableWidget_local->setItem(row, 3, channelItem); + + QTableWidgetItem* typeItem = new QTableWidgetItem(info.type); + ui->tableWidget_local->setItem(row, 4, typeItem); + + QTableWidgetItem* sizeItem = new QTableWidgetItem(QString::number(info.size)); + ui->tableWidget_local->setItem(row, 5, sizeItem); + + _mapMeasure.insert(info.name,info); + for(int i = 0;i < _validType.size();++i){ + if(_validType.at(i).name == info.name){ //可用类型中移除该类型 + _validType.removeAt(i); + break; + } + } +} + +void BayInfoDlg::onAddClicked() +{ + if(_measureDlg == nullptr){ + _measureDlg = new MeasureSettingDlg(this); + _measureDlg->setBay(this); + } + _measureDlg->showDlg(); +} + +void BayInfoDlg::onDeleteClicked() +{ + // 获取当前选中的索引 + QModelIndexList selectedIndexes = ui->tableWidget_local->selectionModel()->selectedRows(); + if (selectedIndexes.isEmpty()) { + return; // 没有选中任何行 + } + + // 获取当前选中的第一项索引 + QModelIndex index = selectedIndexes.first(); + if (!index.isValid()) { + return; + } + + QModelIndex indexName = index.sibling(index.row(),1); + QString sName = indexName.data().toString(); + if(_mapMeasure.contains(sName)){ + MeasurementInfo info = _mapMeasure.take(sName); + measureAttributeType typ; + typ.name = info.name; + typ.tag = info.tag; + _validType.append(typ); + } + + int currentRow = ui->tableWidget_local->currentRow(); + if (currentRow == -1) { + return; // 没有选中行 + } + + ui->tableWidget_local->removeRow(currentRow); +} + +void BayInfoDlg::onIndexRbtnClicked(const QPoint &pos) +{ + // 获取当前点击的位置对应的索引 + QModelIndex index = ui->tableWidget_local->indexAt(pos); + if (!index.isValid()) { + return; // 如果点击的是空白区域,直接返回 + } + + QMenu menu; + QAction *deleteAction = new QAction("移除量测", this); + menu.addAction(deleteAction); + + // 连接删除菜单项的触发信号与槽函数 + connect(deleteAction, &QAction::triggered, this, &BayInfoDlg::onDeleteClicked); + + // 在点击位置显示菜单 + menu.exec(ui->tableWidget_local->mapToGlobal(pos)); +} diff --git a/diagramCavas/source/bayManagerContentDlg.cpp b/diagramCavas/source/bayManagerContentDlg.cpp new file mode 100644 index 0000000..171b874 --- /dev/null +++ b/diagramCavas/source/bayManagerContentDlg.cpp @@ -0,0 +1,21 @@ +#include "bayManagerContentDlg.h" +#include "ui_bayManagerContentDlg.h" + +BayManagerContentDlg::BayManagerContentDlg(QWidget *parent) + : QDialog(parent) + , ui(new Ui::bayManagerContentDlg) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + initial(); +} + +BayManagerContentDlg::~BayManagerContentDlg() +{ + delete ui; +} + +void BayManagerContentDlg::initial() +{ + +} diff --git a/diagramCavas/source/bayManagerDlg.cpp b/diagramCavas/source/bayManagerDlg.cpp new file mode 100644 index 0000000..3096149 --- /dev/null +++ b/diagramCavas/source/bayManagerDlg.cpp @@ -0,0 +1,61 @@ +#include "bayManagerDlg.h" +#include "bayManagerContentDlg.h" +#include "ui_bayManagerDlg.h" + +BayManagerDlg::BayManagerDlg(QWidget *parent) + : QDialog(parent) + , ui(new Ui::bayManagerDlg) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + initial(); +} + +BayManagerDlg::~BayManagerDlg() +{ + delete ui; +} + +void BayManagerDlg::initial() +{ + connect(ui->btn_ok,&QPushButton::clicked,this,&BayManagerDlg::onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,&BayManagerDlg::onCancelClicked); +} + +void BayManagerDlg::showDlg() +{ + +} + +void BayManagerDlg::clearData() +{ + ui->listWidget->clear(); + for(auto& page:_contentData) + { + ui->stackedWidget->removeWidget(page); + } + qDeleteAll(_contentData); + _contentData.clear(); +} + +void BayManagerDlg::onOkClicked() +{ + hide(); +} + +void BayManagerDlg::onCancelClicked() +{ + hide(); +} + +void BayManagerDlg::generatePage(QStringList lstBay) +{ + ui->listWidget->addItems(lstBay); + for(auto& str:lstBay) + { + BayManagerContentDlg* pBay = new BayManagerContentDlg(this); + pBay->setName(str); + int index = ui->stackedWidget->addWidget(pBay); + _contentData.insert(index,pBay); + } +} diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index 715e6ff..3df7acb 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -55,7 +55,7 @@ void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode) m_mapDrawPanel.insert(_curPage,qMakePair(pPanel,pSub)); pPanel->show(); - FixedPortsModel* pModel = pPanel->getModel(); + FixedPortsModel* pModel = pPanel->getModelController(); pModel->setCavas(this); connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage); connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); @@ -106,7 +106,7 @@ void DiagramCavas::onSignal_savePage() switch (ret) { case QMessageBox::Save: //todo:已存在更新 { - QMap map = pPanel->getModel()->allItems(); + QMap map = pPanel->getModelController()->allItems(); for(auto pItem:map) { if(pItem->itemChanged()) @@ -345,7 +345,7 @@ void DiagramCavas::onCreateTestBaseModelDiagram() onSignal_addDrawingPanel(pEntity,DM_baseModel); DrawingPanel* pPanel = getPanel(pEntity->name()); - pPanel->getModel()->addTestData(); + pPanel->getModelController()->addTestData(); } } diff --git a/diagramCavas/source/drawingPanel.cpp b/diagramCavas/source/drawingPanel.cpp index d915c56..6e61ef9 100644 --- a/diagramCavas/source/drawingPanel.cpp +++ b/diagramCavas/source/drawingPanel.cpp @@ -171,6 +171,7 @@ void DrawingPanel::onSignal_Generate() if(m_pDiagramNameInputer == nullptr){ m_pDiagramNameInputer = new ProjectDiagramNameInput(this); m_pDiagramNameInputer->setModel(_pModel); + connect(m_pDiagramNameInputer,&ProjectDiagramNameInput::onGenerateClicked,_pModel,&FixedPortsModel::onSignal_generateDiagram); } m_pDiagramNameInputer->show(); } diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index d2dbfd0..11e2637 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -83,6 +83,11 @@ QMap& FixedPortsModel::allItems() return _nodeItem; } +GraphicsProjectModelItem* FixedPortsModel::nodeItem(QUuid uuid) +{ + return _nodeItem.value(uuid,nullptr); +} + bool FixedPortsModel::addNodeItem(QUuid uuid,GraphicsProjectModelItem* pItem) { @@ -575,6 +580,31 @@ void FixedPortsModel::onSignal_GetPointData(QString type,QMap map } } +void FixedPortsModel::onSignal_generateDiagram(const QString& sName) +{ + QStringList lstInfo; + for(auto& item:_baseItem){ + BaseModelProperty* pBase = dynamic_cast(item->getProperty()); + if(pBase){ + QString sModel = pBase->getModelProperty().modelSetting.modelName; + if(sModel.isEmpty()){ + lstInfo.append(pBase->name()); + } + } + } + if(!lstInfo.isEmpty()){ + QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"%1未设置完毕").arg(lstInfo.join("、"))); + return; + } + + QList lst; + for(auto& item:_baseItem) + { + lst.append(item); + } + generateProjectModel(sName,lst); +} + void FixedPortsModel::startHttpRequest() { if(_timer) @@ -747,6 +777,7 @@ void FixedPortsModel::generatePropertyDlg(const QString& sModel) ItemPropertyDlg* dlg = new ItemPropertyDlg(_widget); if(dlg) { + dlg->setModelController(this); dlg->loadGroupButton(info.groupInfo); _modelStateInfo[sModel]._PropertyDlg = dlg; } @@ -920,7 +951,7 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QListgetPanel(sPageName); } - for(auto& pBaseItem:lstItem) //首次循环处理所有非连线对象 + /*for(auto& pBaseItem:lstItem) //首次循环处理所有非连线对象 { BaseModelProperty* pBase = dynamic_cast(pBaseItem->getProperty()); if(pBase->type() != 8){ //不是电缆 @@ -932,18 +963,18 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList(pBaseItem->getProperty()); if(pBase->type() == 8){ //电缆 QUuid id = QUuid::createUuid(); - BaseProperty* pData = pProPanel->getModel()->addNodeData(id,pBase->type(),pBase->name(),pBase->modelName()); + BaseProperty* pData = pProPanel->getModelController()->addNodeData(id,pBase->type(),pBase->name(),pBase->modelName()); if(pData) { pData->setDataChanged(true); //数据状态改变 - //addProjectItemByBaseData(pProPanel,pBaseItem,pData); + addProjectItemByBaseData(pProPanel,pBaseItem,pData); } } } @@ -956,27 +987,47 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase if(_baseItem.contains(pBase->uuid())){ GraphicsProjectModelItem* pProItem = nullptr; GraphicsBaseModelItem* pBaseItem = _baseItem.value(pBase->uuid()); + pPro->setSourceItemId(pBaseItem->itemId().toString()); //设置被哪个对象生成 int type = pBase->graphicsType(); if(type == GIT_baseBus) { + QByteArray svg; + if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ + svg = DataBase::GetInstance()->ModelType()[1].icon; + } + else{ + svg = pBase->getModelProperty().modelSetting.mapSvg.first(); + } QRectF rec = pBaseItem->boundingRect(); - pProItem = new ElectricSvgItemBus(rec.toRect()); + auto pBus = new ElectricSvgItemRect(rec.toRect()); + pBus->loadSvg(svg); + pProItem = pBus; pProItem->setItemType(GIT_bus); - QByteArray svg = pBase->getModelProperty().modelSetting.mapSvg.first(); } else if(type == GIT_baseBreaker) { + QByteArray svg; + if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ + svg = DataBase::GetInstance()->ModelType()[3].icon; + } + else{ + svg = pBase->getModelProperty().modelSetting.mapSvg.first(); + } QRectF rec = pBaseItem->boundingRect(); - pProItem = new ElectricSvgItemRect(rec.toRect()); + auto pBreaker = new ElectricSvgItemRect(rec.toRect()); + pBreaker->loadSvg(svg); + pProItem = pBreaker; pProItem->setItemType(GIT_itemRect); - QByteArray svg = pBase->getModelProperty().modelSetting.mapSvg.first(); } - - if(pBase->graphicsType() == GIT_baseLine) + else if(type == GIT_baseLine) { - + pProItem = new ElectricConnectLineItem(); + pProItem->setItemId(pPro->uuid()); + pProItem->setItemType(GIT_link); + pPanel->getScene()->addItem(pProItem); } - else + + if(pBase->graphicsType() != GIT_baseLine) //非连接线对象 { PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,pPro->uuid().toString(),pBase->name()); QList lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点 @@ -988,6 +1039,8 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase if(proTer->type() == TerminalType::PowerConnect) { pProItem->addPort(p_movable,proTer->relativePosition(),proTer->id()); + ItemPort* pPort = pProItem->getPortById(proTer->id()); + pPort->setSourcePortId(baseTer->id()); } else if(proTer->type() == TerminalType::PowerInput || proTer->type() == TerminalType::PowerOutput) { @@ -1010,13 +1063,16 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase } else if(pos.y() > 0) { - locate = P_top; + locate = P_down; } else if(pos.y() < 0) { - locate = P_down; + locate = P_top; } pProItem->addPort(P_const,pos,proTer->id(),typ,locate); + + ItemPort* pPort = pProItem->getPortById(proTer->id()); + pPort->setSourcePortId(baseTer->id()); } } @@ -1027,10 +1083,94 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pProItem->setProperty(pPro); //绑定模型 pProItem->updateByProperty(); //使用模型更新自身 //QString sModel = _projectModelName.value(id.toString()); - QString sModel = pBase->getModelProperty().modelSetting.modelName; - pProItem->setModelName(sModel); - pPanel->getModel()->addNodeItem(QUuid(pEntity->id()),pProItem); + //QString sModel = pBase->getModelProperty().modelSetting.modelName; + //pProItem->setModelName(sModel); + pPanel->getModelController()->addNodeItem(QUuid(pEntity->id()),pProItem); } + else //连接线对象 + { + PowerConnection* pCon = TopologyManager::instance().connection(pBase->uuid().toString(),ModelFunctionType::BaseModel); + if(pCon){ + //基模connect参数 + QString baseFromComponentId = pCon->fromComponent(); + QString baseToComponentId = pCon->toComponent(); + QString baseFromTerId = pCon->fromTerminalId(); + QString baseToTerId = pCon->toTerminalId(); + + QMap mapPro = BasePropertyManager::instance().getEntityData(); + bool proFromExist = false; //工程模from对象是否生成 + bool proToExist = false; //工程模to对象是否生成 + + QString proFromItemId; + QString proToItemId; + QString proFromTerId; + QString proToTerId; + for(auto& pPro:mapPro) + { + if(pPro->getSourceItemId() == baseFromComponentId){ + proFromExist = true; + proFromItemId = pPro->uuid().toString(); + continue; + } + if(pPro->getSourceItemId() == baseToComponentId){ + proToExist = true; + proToItemId = pPro->uuid().toString(); + continue; + } + } + + if(!proFromExist) //工程模from对象未生成 + { + GraphicsBaseModelItem* pFromItem = _baseItem.value(QUuid(baseFromComponentId)); + QUuid id = QUuid::createUuid(); + BaseProperty* pData = pPanel->getModelController()->addNodeData(id,pFromItem->getProperty()->type(),pFromItem->getProperty()->name(),pFromItem->getProperty()->modelName()); + addProjectItemByBaseData(pPanel,pFromItem,pData); + proFromItemId = id.toString(); + } + + if(!proToExist) //工程模to对象未生成 + { + GraphicsBaseModelItem* pToItem = _baseItem.value(QUuid(baseToComponentId)); + QUuid id = QUuid::createUuid(); + BaseProperty* pData = pPanel->getModelController()->addNodeData(id,pToItem->getProperty()->type(),pToItem->getProperty()->name(),pToItem->getProperty()->modelName()); + addProjectItemByBaseData(pPanel,pToItem,pData); + proToItemId = id.toString(); + } + + GraphicsProjectModelItem* proFrom = pPanel->getModelController()->nodeItem(QUuid(proFromItemId)); + GraphicsProjectModelItem* proTo = pPanel->getModelController()->nodeItem(QUuid(proToItemId)); + if(proFrom){ + QMap mapFrom = proFrom->getPorts(); + for(auto& port:mapFrom){ + if(port->getSourcePortId() == baseFromTerId){ + proFromTerId = port->getId(); + auto pLine = dynamic_cast(pProItem); + if(pLine) + pLine->setStartPoint(port->scenePos()); + } + } + } + + if(proTo){ + QMap mapTo = proTo->getPorts(); + for(auto& port:mapTo){ + if(port->getSourcePortId() == baseToTerId){ + proToTerId = port->getId(); + auto pLine = dynamic_cast(pProItem); + if(pLine) + pLine->setEndPoint(port->scenePos()); + } + } + } + + PowerConnection* pCon = TopologyManager::instance().createConnection(pPro->uuid().toString(),proFromTerId,proToTerId,proFromItemId,proToItemId); + auto pLine = dynamic_cast(pProItem); + if(pLine) + pLine->calculatePath(); + } + } + QString sModel = pBase->getModelProperty().modelSetting.modelName; + pProItem->setModelName(sModel); } } } @@ -1047,6 +1187,7 @@ void FixedPortsModel::addTestData() if(pEntityBreaker) pBreaker->setEntity(pEntityBreaker); BaseModelProperty* pBreakerData = addBaseNodeData(breakerId,3,"断路器1",DataBase::GetInstance()->ModelType()[3].modelType); + pBreakerData->setGraphicsType(GIT_baseBreaker); if(pBreakerData) { pBreaker->setProperty(pBreakerData); @@ -1068,12 +1209,13 @@ void FixedPortsModel::addTestData() pBus->loadSvg(byte1); //createTopoTerminalsByItem(pBreaker); BaseModelProperty* pBusData = addBaseNodeData(busId,1,"母线1",DataBase::GetInstance()->ModelType()[1].modelType); + pBusData->setGraphicsType(GIT_baseBus); if(pBusData) { pBus->setProperty(pBusData); pBusData->setDataChanged(true); //数据状态改变 } - PowerEntity* pEntityBus = TopologyManager::instance().createEntity(EntityType::Component,breakerId.toString(),"母线1",ModelFunctionType::BaseModel); + PowerEntity* pEntityBus = TopologyManager::instance().createEntity(EntityType::Component,busId.toString(),"母线1",ModelFunctionType::BaseModel); if(pEntityBus) pBus->setEntity(pEntityBus); addBaseItem(busId,pBus); @@ -1085,6 +1227,7 @@ void FixedPortsModel::addTestData() pLine->setItemId(lineId); pLine->setItemType(GIT_baseLine); BaseModelProperty* pLineData = addBaseNodeData(lineId,8,"电缆1",DataBase::GetInstance()->ModelType()[4].modelType); + pLineData->setGraphicsType(GIT_baseLine); if(pLineData) { pLine->setProperty(pLineData); diff --git a/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp b/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp index b6e055d..74c3492 100644 --- a/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp +++ b/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp @@ -18,33 +18,13 @@ ElectricSvgItemRect::ElectricSvgItemRect(const QRect &rect, bool genNewPort, QGr setFunctionHandleIfShow(false); setFunctionHandleEnaable(false); - //入线口 - /*ItemPort* pHandle1 = new ItemPort(this); - pHandle1->setType(T_lineIn); - 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_lineOut); - pHandle2->setTag(H_connect+1); - pHandle2->setPortPos(P_down); - pHandle2->setParent(this); - m_vecHanle.insert(H_connect+1,pHandle2); - - m_mapPort.insert(QString::number(_portId++),pHandle1); - m_mapPort.insert(QString::number(_portId++),pHandle2);*/ - m_dRatioX = 0.5; - if(genNewPort) + /*if(genNewPort) { 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); - } - - qRegisterMetaType("PropertyInfo"); //注册自定义数据类型 + }*/ } ElectricSvgItemRect::~ElectricSvgItemRect() @@ -56,20 +36,6 @@ ElectricSvgItemRect::~ElectricSvgItemRect() void ElectricSvgItemRect::updateHandles() { ElectricSvgItem::updateHandles(); - /*if( m_vecHanle.contains(H_connect)) - { - const QRectF& boundingRect = this->boundingRect(); - - if(m_vecHanle.contains(H_connect)) - { - m_vecHanle[H_connect]->move(boundingRect.right() - boundingRect.width() * m_dRatioX, boundingRect.top()); - } - - if(m_vecHanle.contains(H_connect + 1)) - { - m_vecHanle[H_connect + 1]->move(boundingRect.right() - boundingRect.width() * m_dRatioX, boundingRect.bottom()); - } - }*/ } void ElectricSvgItemRect::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) @@ -78,7 +44,3 @@ void ElectricSvgItemRect::paint(QPainter* painter, const QStyleOptionGraphicsIte } -/*void ElectricSvgItemRect::updateByProperty() -{ - -}*/ diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index edf46b0..12b626a 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -16,6 +16,7 @@ GraphicsBaseItem::GraphicsBaseItem(QGraphicsItem *parent) { m_type = T_item; _itemChanged = false; + m_touched = false; setFlag(QGraphicsItem::ItemIsSelectable, true); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); @@ -24,7 +25,15 @@ GraphicsBaseItem::GraphicsBaseItem(QGraphicsItem *parent) GraphicsBaseItem::~GraphicsBaseItem() { - + foreach (int key, m_vecHanle.keys()) + { + ItemControlHandle* pHandle = m_vecHanle.value(key); + if (pHandle) + { + delete pHandle; + pHandle = nullptr; + } + } } int GraphicsBaseItem::addPort(PortState typ,QPointF vec,QString id,HandleType hType,PortPos pos) diff --git a/diagramCavas/source/graphicsItem/graphicsItemGroup.cpp b/diagramCavas/source/graphicsItem/graphicsItemGroup.cpp index 392585b..cf16c4a 100644 --- a/diagramCavas/source/graphicsItem/graphicsItemGroup.cpp +++ b/diagramCavas/source/graphicsItem/graphicsItemGroup.cpp @@ -1,5 +1,5 @@ #include "graphicsItem/graphicsItemGroup.h" -#include "graphicsItem/handleRect.h" +//#include "graphicsItem/handleRect.h" #include #include #include @@ -16,7 +16,7 @@ GraphicsItemGroup::GraphicsItemGroup(QGraphicsItem *parent) //初始化缩放操作用的handle //m_vecHanle.reserve(H_left); - for(int i = H_leftTop; i <= H_left; i++) + /*for(int i = H_leftTop; i <= H_left; i++) { ItemControlHandle* pHandle = new HandleRect(this); pHandle->setType(T_resize); @@ -29,7 +29,7 @@ GraphicsItemGroup::GraphicsItemGroup(QGraphicsItem *parent) pHandle->setType(T_rotate); pHandle->setTag(i); m_vecHanle.insert(i-1,pHandle); - } + }*/ setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); @@ -55,15 +55,8 @@ void GraphicsItemGroup::paint(QPainter* painter, const QStyleOptionGraphicsItem* int nPenWidth = 1; painter->setPen(QPen(QColor(70,70,70), nPenWidth, Qt::DashLine)); //蓝色的外框 painter->setBrush(Qt::NoBrush); - painter->drawRect(m_boundingRect_selected); + painter->drawRect(m_boundingRect); - //绘制变换原点 - /*QPointF originPoint = transformOriginPoint(); - //qDebug() << "originPoint:" << originPoint << " boundingRect:" << m_boundingRect; - painter->setBrush(Qt::red); - painter->drawEllipse(QPointF(0,0), 4, 4); - painter->setBrush(Qt::blue); - painter->drawEllipse(originPoint, 4, 4);*/ } } @@ -77,9 +70,7 @@ QVariant GraphicsItemGroup::itemChange(QGraphicsItem::GraphicsItemChange change, if (change == QGraphicsItem::ItemSelectedHasChanged) { QGraphicsItemGroup *group = dynamic_cast(parentItem()); - if(!group) - setHandleVisible(value.toBool()); - else //在某一组群中,由组群展示是否选中,自身不做展示 + if(group) //在某一组群中,由组群展示是否选中,自身不做展示 { setSelected(false); return QVariant::fromValue(false); @@ -147,7 +138,7 @@ void GraphicsItemGroup::updateCoordinate() //当执行了resie和editShape函数 //QTimer::singleShot(2000,[&](){moveBy(-delta.x(), -delta.y());}); - updateHandles(); + //updateHandles(); } //调用该组内所有item(过滤handle)相关函数 @@ -188,7 +179,7 @@ void GraphicsItemGroup::resize(int nHandle,double dSX, double dSY, const QPointF m_boundingRect = trans.mapRect(m_lastBoudingRect); m_dWidth = m_boundingRect.width(); m_dHeight = m_boundingRect.height(); - updateHandles(); + //updateHandles(); //调用该组内所有item(过滤handle)相关函数 foreach (QGraphicsItem *item, childItems()) diff --git a/diagramCavas/source/itemPropertyDlg.cpp b/diagramCavas/source/itemPropertyDlg.cpp index d9954f0..cd667ec 100644 --- a/diagramCavas/source/itemPropertyDlg.cpp +++ b/diagramCavas/source/itemPropertyDlg.cpp @@ -11,6 +11,7 @@ #include "baseProperty.h" #include "ptExtraInfoDlg.h" #include "ctExtraInfoDlg.h" +#include "bayInfoDlg.h" ItemPropertyDlg::ItemPropertyDlg(QWidget *parent) : QDialog(parent) @@ -18,6 +19,7 @@ ItemPropertyDlg::ItemPropertyDlg(QWidget *parent) ,layout_(nullptr) ,btnGroup_(nullptr) ,_curItem(nullptr) + ,_curModelController(nullptr) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); @@ -103,7 +105,7 @@ void ItemPropertyDlg::onGroupSelected(const QString& str) { QMap valueMap; BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_); - if(str != QString("component") && str != QString("基本信息")) + if(str != QString("component") && str != QString("bay")) { if(groupValue_[str].mapInfo.contains(curUuid_)) valueMap = groupValue_[str].mapInfo[curUuid_]; @@ -129,11 +131,15 @@ void ItemPropertyDlg::createGroupView(const QString& str) contentDlg = new BaseInfoDlg(ui->stackedWidget); } else if(str == "base_extend" || str == QString::fromWCharArray(L"扩展信息")){ - //if(pPro->type() == pt) - contentDlg = new CtExtraInfoDlg(ui->stackedWidget); + if(pPro->type() == 4) + contentDlg = new CtExtraInfoDlg(ui->stackedWidget); + else if(pPro->type() == 5) + contentDlg = new PtExtraInfoDlg(ui->stackedWidget); + else + contentDlg = new PropertyContentDlg(ui->stackedWidget); } else if(str == "bay" || str == QString::fromWCharArray(L"间隔信息")){ - + contentDlg = new BayInfoDlg(ui->stackedWidget); } else{ contentDlg = new PropertyContentDlg(ui->stackedWidget); @@ -144,6 +150,7 @@ void ItemPropertyDlg::createGroupView(const QString& str) contentDlg->createGroupView(groupInfo_[str]); } + contentDlg->setModelController(_curModelController); //传递modelControl groupViews_.insert(str, contentDlg); ui->stackedWidget->addWidget(contentDlg); } diff --git a/diagramCavas/source/measureSettingDlg.cpp b/diagramCavas/source/measureSettingDlg.cpp new file mode 100644 index 0000000..2a95f7d --- /dev/null +++ b/diagramCavas/source/measureSettingDlg.cpp @@ -0,0 +1,124 @@ +#include +#include "measureSettingDlg.h" +#include "bayInfoDlg.h" +#include "graphicsDataModel/fixedPortsModel.h" +#include "graphicsItem/graphicsBaseItem.h" +#include "baseProperty.h" +#include "ui_measureSettingDlg.h" + +MeasureSettingDlg::MeasureSettingDlg(QWidget *parent) + : QDialog(parent) + , ui(new Ui::measureSettingDlg) + ,_pBay(nullptr) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + initial(); +} + +MeasureSettingDlg::~MeasureSettingDlg() +{ + delete ui; +} + +void MeasureSettingDlg::initial() +{ + connect(ui->btn_ok,&QPushButton::clicked,this,&MeasureSettingDlg::onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,&MeasureSettingDlg::onCancelClicked); + connect(ui->cb_tag,&QComboBox::textActivated,this,&MeasureSettingDlg::onTagChanged); + connect(ui->cb_name,&QComboBox::textActivated,this,&MeasureSettingDlg::onNameChanged); + + // 设置正则验证器:1-5000整数 + QRegularExpression regExp("^(?:[1-9]|[1-9]\\d{1,2}|[1-4]\\d{3}|5000)$"); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp,ui->le_size); + ui->le_size->setValidator(validator); +} + +void MeasureSettingDlg::showDlg() +{ + clearData(); + QStringList lstTag; + QStringList lstName; + show(); + if(_pBay){ + auto lst = _pBay->getValidType(); + for(auto& item:lst){ + lstTag.append(item.tag); + lstName.append(item.name); + } + ui->cb_tag->addItems(lstTag); + ui->cb_name->addItems(lstName); + + QStringList lstDevice; + if(_pBay){ + FixedPortsModel* pModel = _pBay->getModelController(); + if(pModel){ + auto map = pModel->allItems(); + for(auto& pItem:map){ + auto pPro = pItem->getProperty(); + if(pPro){ + lstDevice.append(pPro->tag()); //根据本图的图元获取对应设备名 + } + } + } + } + + ui->cb_equip->addItems(lstDevice); + } +} + +void MeasureSettingDlg::clearData() +{ + if(ui->cb_tag->count()) + ui->cb_tag->clear(); + if(ui->cb_name->count()) + ui->cb_name->clear(); + ui->le_port->clear(); + ui->le_size->clear(); +} + +void MeasureSettingDlg::onOkClicked() +{ + MeasurementInfo info; + info.tag = ui->cb_tag->currentText(); + info.name = ui->cb_name->currentText(); + info.equipment = ui->cb_equip->currentText(); + info.channel = ui->le_port->text(); + info.type = ui->cb_type->currentText(); + info.size = ui->le_size->text().toInt(); + if(info.channel.isEmpty() || info.size == 0){ + QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"参数未设置完毕")); + return; + } + + if(_pBay) + _pBay->addMeasure(info); + hide(); +} + +void MeasureSettingDlg::onCancelClicked() +{ + hide(); +} + +void MeasureSettingDlg::onTagChanged(const QString& str) +{ + auto lst = _pBay->getValidType(); + for(auto& item:lst){ + if(item.tag == str){ + ui->cb_name->setCurrentText(item.name); + return; + } + } +} + +void MeasureSettingDlg::onNameChanged(const QString& str) +{ + auto lst = _pBay->getValidType(); + for(auto& item:lst){ + if(item.name == str){ + ui->cb_tag->setCurrentText(item.tag); + return; + } + } +} diff --git a/diagramCavas/source/projectDiagramNameInput.cpp b/diagramCavas/source/projectDiagramNameInput.cpp index 7ab3174..2ae4efb 100644 --- a/diagramCavas/source/projectDiagramNameInput.cpp +++ b/diagramCavas/source/projectDiagramNameInput.cpp @@ -27,8 +27,9 @@ void ProjectDiagramNameInput::initial() void ProjectDiagramNameInput::onOkClicked() { - if(DataBase::GetInstance()->getPageIdByName(ui->le_name->text()) != -1) + if(DataBase::GetInstance()->getPageIdByName(ui->le_name->text()) == -1) { + emit onGenerateClicked(ui->le_name->text()); hide(); } } diff --git a/diagramCavas/source/projectModelSetting.cpp b/diagramCavas/source/projectModelSetting.cpp index a7cbac3..d019795 100644 --- a/diagramCavas/source/projectModelSetting.cpp +++ b/diagramCavas/source/projectModelSetting.cpp @@ -43,6 +43,9 @@ void ProjectModelSetting::initial() connect(ui->cb_modelType,&QComboBox::currentTextChanged,this,&ProjectModelSetting::onCurrentTextChanged); _curPath = QCoreApplication::applicationDirPath()+"/proModelImage/"; ui->cb_modelType->setPlaceholderText(" "); + QRegularExpression regExp("[a-zA-Z0-9]+"); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); + ui->le_saveAs->setValidator(validator); } void ProjectModelSetting::loadPicture() @@ -132,7 +135,8 @@ void ProjectModelSetting::loadProject(const QString& sMeta) void ProjectModelSetting::onOkClicked() { - + _curItemData->setModelName(ui->cb_modelType->currentText()); + hide(); } void ProjectModelSetting::onCancelClicked() @@ -283,14 +287,16 @@ void ProjectModelSetting::onCurrentTextChanged(const QString& text) { _curItemData->getModelProperty().release(); PropertyModel model = ProjectModelManager::instance().getData()[_curItemData->metaModelName()][text].deepCopy(); + //PropertyModel model = ProjectModelManager::instance().getData()[_curItemData->metaModelName()][text]; _curItemData->setModelProperty(model); ui->treeView_base->setModel(_curItemData->getModelProperty().pBase); ui->treeView_sub->setModel(_curItemData->getModelProperty().pSelect); ui->treeView_sub->expandAll(); ui->treeView_base->expandAll(); loadPicture(); - setSelectedItems(_curItemData->getModelProperty().modelSetting.mapSvg.keys()); - showTestPic(_curItemData->getModelProperty().modelSetting.mapSvg.first()); + if(!_curItemData->getModelProperty().modelSetting.mapSvg.isEmpty()) + setSelectedItems(_curItemData->getModelProperty().modelSetting.mapSvg.keys()); + //showTestPic(_curItemData->getModelProperty().modelSetting.mapSvg.first()); } } diff --git a/diagramCavas/source/util/baseSelector.cpp b/diagramCavas/source/util/baseSelector.cpp index 1cd85cd..249f735 100644 --- a/diagramCavas/source/util/baseSelector.cpp +++ b/diagramCavas/source/util/baseSelector.cpp @@ -179,7 +179,7 @@ void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene if (items.count() == 1) { - AbstractShape* item = qgraphicsitem_cast(items.first()); + GraphicsBaseItem* item = qgraphicsitem_cast(items.first()); if(item) { if(ms_nDragHandle == H_none) @@ -409,13 +409,9 @@ void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, Design GraphicsProjectModelItem* item = qgraphicsitem_cast(items.first()); if(item) { - GraphicsItemType tpe = item->getItemType(); - if(tpe != GIT_link) - { - QString modelName = item->getModelName(); //todo:additem时填写模型类型 - QUuid uuid = item->itemId(); - _model->showModelDlg(modelName,uuid,item); - } + QString modelName = item->getModelName(); //todo:additem时填写模型类型 + QUuid uuid = item->itemId(); + _model->showModelDlg(modelName,uuid,item); } } } diff --git a/diagramCavas/source/util/scalingSelector.cpp b/diagramCavas/source/util/scalingSelector.cpp index e17bd1a..496cb60 100644 --- a/diagramCavas/source/util/scalingSelector.cpp +++ b/diagramCavas/source/util/scalingSelector.cpp @@ -25,7 +25,7 @@ void ScalingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerSc QList items = scene->selectedItems(); if (items.count() == 1) { - AbstractShape* item = qgraphicsitem_cast(items.first()); + GraphicsBaseItem* item = qgraphicsitem_cast(items.first()); if(item) { if(ms_nDragHandle != H_none) diff --git a/diagramCavas/ui/bayInfoDlg.ui b/diagramCavas/ui/bayInfoDlg.ui new file mode 100644 index 0000000..241ca58 --- /dev/null +++ b/diagramCavas/ui/bayInfoDlg.ui @@ -0,0 +1,303 @@ + + + bayInfoDlg + + + + 0 + 0 + 784 + 684 + + + + + 12 + + + + Dialog + + + + 6 + + + 10 + + + + + + + + + 本元件对本间隔的量测贡献 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + SIZE + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 20 + 20 + + + + + 20 + 20 + + + + + + + + + + + + 名称 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + TAG + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 设备 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 端子 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 类型 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + false + + + false + + + + + + + + + + + 本间隔的其他量测 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + + 综合保护设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + 其他设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 动态感知设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 故障录波设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + border:4px double dark; + + + + + + + + + + + + + + + 间隔名称 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 序号 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + -- + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + + + 状态检测设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + 监控设备 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + diff --git a/diagramCavas/ui/bayManagerContentDlg.ui b/diagramCavas/ui/bayManagerContentDlg.ui new file mode 100644 index 0000000..8a41272 --- /dev/null +++ b/diagramCavas/ui/bayManagerContentDlg.ui @@ -0,0 +1,271 @@ + + + bayManagerContentDlg + + + + 0 + 0 + 584 + 562 + + + + + 12 + + + + Dialog + + + + + + 间隔信息 + + + + 10 + + + + + 名称 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 间隔序号 + + + + + + + + + + 类型 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 服役状态 + + + + + + + + + IN + + + + + + + OUT + + + + + + + + + 联结 从 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + 标称电压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 满载电流 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + 装机容量 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + 设备配置 + + + + + + 0 + + + + 综合保护 + + + + + + false + + + + + + + + 监控设备 + + + + + + false + + + + + + + + 动态感知 + + + + + + false + + + + + + + + 故障录波 + + + + + + false + + + + + + + + 状态检测 + + + + + + false + + + + + + + + 其他设备 + + + + + + false + + + + + + + + + + + + + + + diff --git a/diagramCavas/ui/bayManagerDlg.ui b/diagramCavas/ui/bayManagerDlg.ui new file mode 100644 index 0000000..4ab386d --- /dev/null +++ b/diagramCavas/ui/bayManagerDlg.ui @@ -0,0 +1,156 @@ + + + bayManagerDlg + + + + 0 + 0 + 870 + 632 + + + + + 12 + + + + Dialog + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 16777215 + 25 + + + + background-color: rgb(209, 209, 209); + + + + + + + 12 + + + + color: rgb(0, 0, 0); + + + 间隔管理 + + + + + + + Qt::Orientation::Horizontal + + + + 803 + 10 + + + + + + + + + + + + + + 间隔列表 + + + + + + + + + + + + + + + + 16777215 + 30 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Horizontal + + + + 469 + 20 + + + + + + + + 确定 + + + + + + + 取消 + + + + + + + + + + + + + + diff --git a/diagramCavas/ui/measureSettingDlg.ui b/diagramCavas/ui/measureSettingDlg.ui new file mode 100644 index 0000000..e7fb0d1 --- /dev/null +++ b/diagramCavas/ui/measureSettingDlg.ui @@ -0,0 +1,388 @@ + + + measureSettingDlg + + + + 0 + 0 + 439 + 310 + + + + + 12 + + + + Dialog + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + background-color: rgb(206, 206, 206); + + + + 0 + + + 0 + + + + + + 12 + + + + color: rgb(0, 0, 0); + + + 量测设置 + + + + + + + Qt::Orientation::Horizontal + + + + 314 + 20 + + + + + + + + + + + TAG/名称 + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + TAG: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 150 + 0 + + + + + + + + 名称: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 150 + 0 + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 设备/端子 + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + 设备: + + + + + + + + 150 + 0 + + + + + + + + 端子: + + + + + + + + 150 + 0 + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 类型/SIZE + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + 类型: + + + + + + + + 150 + 0 + + + + + 遥测 + + + + + 遥信 + + + + + 遥控 + + + + + 遥调 + + + + + 整定值 + + + + + + + + SIZE: + + + + + + + + 150 + 0 + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 80 + 22 + + + + 完成 + + + + + + + 取消 + + + + + + + + + + + diff --git a/diagramUtils/include/dataBase.h b/diagramUtils/include/dataBase.h index 1daf585..ee3cd9a 100644 --- a/diagramUtils/include/dataBase.h +++ b/diagramUtils/include/dataBase.h @@ -61,6 +61,8 @@ public: QJsonObject getPageContextByName(QString name); QList getAllPage(); /*********************************************************************************/ + bool insertMeasurement(QString tag,QString name,int type,QJsonObject dataSource,int size,int bayId,QUuid componentId); + /*********************************************************************************/ bool deleteComponentById(int id); void select(); void parallelUpdate(); @@ -117,6 +119,7 @@ public: QMap getPublicInfo(); //获取公共属性组信息 QMap getProjectModelGroupInfo(const QString&); //获取指定工程模所有属性组信息<属性组名,属性信息> QMap selectGroupProperty(const QString& tableName,QMap mapPro); //返回属性组表中的信息 + QList getMeasureAttributeTypes(); //获取所有量测属性 private: QMap _attributeGroup; //属性组的组 QMap _dataType; //数据类型组 diff --git a/diagramUtils/source/dataBase.cpp b/diagramUtils/source/dataBase.cpp index a8f74fb..5bcd98a 100644 --- a/diagramUtils/source/dataBase.cpp +++ b/diagramUtils/source/dataBase.cpp @@ -1056,6 +1056,35 @@ bool DataBase::deleteComponentById(int id) else return false; } +/*****************************************************************************/ + +bool DataBase::insertMeasurement(QString tag,QString name,int type,QJsonObject dataSource,int size,int bayId,QUuid componentId) +{ + QString strSQL = "INSERT INTO measurement(tag, name, type, data_source, size, bay_id, component_id) VALUES (?, ?, ?, ?, ?, ?, ?)"; + QJsonDocument dataDoc(dataSource); + QString strData = dataDoc.toJson(QJsonDocument::Compact); + + QVariantList params; + params.append(tag); + params.append(name); + params.append(type); + params.append(strData); + params.append(size); + params.append(bayId); + params.append(componentId); + + try + { + executeSQL(strSQL,false,params); + return true; + } + catch (const std::exception& e) + { + LOG_ERROR("DB", QString("Insert measurement fail")); + return false; + } +} +/*****************************************************************************/ void DataBase::select() { @@ -1905,6 +1934,176 @@ QMap DataBase::selectGroupProperty(const QString& table } } +QList DataBase::getMeasureAttributeTypes() +{ + QList lst; + QString strSQL = "SELECT attribute,attribute_name FROM basic.attribute WHERE is_visible = ?"; + QVariantList params; + params.append(2); + + try + { + QSqlQuery query = executeSQL(strSQL,false,params); + while (query.next()) + { + QString attName = query.value(0).toString(); + QString attTag = query.value(1).toString(); + + if(attName.contains("$")){ //包含$ + QStringList lst_dollar; + lst_dollar<<"s1"<<"s2"<<"s3"; + if(attName.contains("sn")){ //同时包含$与sn,9个分支 + QStringList lst_sn; + lst_sn<<"s1"<<"s2"<<"s3"; + + if(attName.contains("_$")){ //包含_$,特殊处理 + if(attName.first(1) == "I"){ //头字母为I + QStringList lst_I; + lst_I<<"a"<<"b"<<"c"; + + for(auto &i:lst_I) + { + QString tn1 = attName; + QString tt1 = attTag; + + QString name = tn1.replace("_$",i); + QString tag = tt1.replace("_$",i); + for(auto &sn:lst_sn) + { + QString tn2 = name; + QString tt2 = tag; + measureAttributeType measure; + measure.name = tn2.replace("sn",sn); + measure.tag = tt2.replace("sn",sn); + lst.append(measure); + } + } + } + else{ //头字母为U + QStringList lst_U; + lst_U<<"AB"<<"BC"<<"CA"; + + for(auto &u:lst_U) + { + QString tn1 = attName; + QString tt1 = attTag; + + QString name = tn1.replace("_$",u); + QString tag = tt1.replace("_$",u); + for(auto &sn:lst_sn) + { + QString tn2 = name; + QString tt2 = tag; + measureAttributeType measure; + measure.name = tn2.replace("sn",sn); + measure.tag = tt2.replace("sn",sn); + lst.append(measure); + } + } + } + } + else{ //只包含$与sn + for(auto &dor:lst_dollar) + { + QString tn1 = attName; + QString tt1 = attTag; + + QString name = tn1.replace("$",dor); + QString tag = tt1.replace("$",dor); + for(auto &sn:lst_sn) + { + QString tn2 = name; + QString tt2 = tag; + measureAttributeType measure; + measure.name = tn2.replace("sn",sn); + measure.tag = tt2.replace("sn",sn); + lst.append(measure); + } + } + } + } + else{ //不包含sn,3种分支 + if(attName.contains("_$")){ //包含_$ + if(attName.first(1) == "I"){ //头字母为I + QStringList lst_I; + lst_I<<"a"<<"b"<<"c"; + + for(auto &i:lst_I) + { + QString name = attName; + QString tag = attTag; + + measureAttributeType measure; + measure.name = name.replace("_$",i); + measure.tag = tag.replace("_$",i); + lst.append(measure); + } + } + else{ //头字母为U + QStringList lst_U; + lst_U<<"AB"<<"BC"<<"CA"; + + for(auto &u:lst_U) + { + QString name = attName; + QString tag = attTag; + + measureAttributeType measure; + measure.name = name.replace("_$",u); + measure.tag = tag.replace("_$",u); + lst.append(measure); + } + } + } + else{ //不包含_$ + QStringList lst_dollar; + lst_dollar<<"s1"<<"s2"<<"s3"; + + for(auto &dor:lst_dollar) + { + QString name = attName; + QString tag = attTag; + + measureAttributeType measure; + measure.name = name.replace("$",dor); + measure.tag = tag.replace("$",dor); + lst.append(measure); + } + } + } + } + else if(attName.contains("sn")){ //只包含sn,3种分支 + QStringList lst_sn; + lst_sn<<"s1"<<"s2"<<"s3"; + + for(auto &sn:lst_sn) + { + QString name = attName; + QString tag = attTag; + + measureAttributeType measure; + measure.name = name.replace("sn",sn); + measure.tag = tag.replace("sn",sn); + lst.append(measure); + } + } + else{ //没有分支 + measureAttributeType measure; + measure.name = attName; + measure.tag = attTag; + lst.append(measure); + } + } + query.clear(); + return lst; + } + catch (const std::exception& e) + { + return lst; + LOG_ERROR("DB", QString("Select measureAttributeType fail")); + } +} + bool DataBase::createDynamicTable(const QString &tableName, const QStringList &fields) { QString strSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " ("; diff --git a/diagramUtils/source/projectModelManager.cpp b/diagramUtils/source/projectModelManager.cpp index 04317f0..2a5cfa0 100644 --- a/diagramUtils/source/projectModelManager.cpp +++ b/diagramUtils/source/projectModelManager.cpp @@ -140,16 +140,18 @@ MapProperty ProjectModelManager::addNewProject(const QString& sMeta,const QStrin if(nState) { QStandardItem* pGroup = nullptr; - if(model.pSelect->findItems(propertyName).isEmpty()) + if(model.pSelect->findItems(property).isEmpty()) { pGroup = new QStandardItem(property); model.pSelect->appendRow(pGroup); //属性的组未存在,将组添加到model } else { - pGroup = model.pSelect->findItems(propertyName)[0]; + pGroup = model.pSelect->findItems(property)[0]; } + //QModelIndex index = findIndex(model.pSelect,propertyName); + if(pGroup){ pGroup->appendRow(pItem); sta.checkState = true; @@ -159,14 +161,14 @@ MapProperty ProjectModelManager::addNewProject(const QString& sMeta,const QStrin else { QStandardItem* pGroup = nullptr; - if(model.pBase->findItems(propertyName).isEmpty()) + if(model.pBase->findItems(property).isEmpty()) { pGroup = new QStandardItem(property); model.pBase->appendRow(pGroup); //属性的组未存在,将组添加到model } else { - pGroup = model.pBase->findItems(propertyName)[0]; + pGroup = model.pBase->findItems(property)[0]; } if(pGroup){ diff --git a/source/mainwindow.cpp b/source/mainwindow.cpp index 80d8fde..f449a31 100644 --- a/source/mainwindow.cpp +++ b/source/mainwindow.cpp @@ -107,7 +107,7 @@ void CMainWindow::initializeDockUi() void CMainWindow::initializeAction() { //撤销、重做 - m_pUndoStack = new QUndoStack(this); + /*m_pUndoStack = new QUndoStack(this); ui->actionUndo = m_pUndoStack->createUndoAction(this, tr("撤销")); ui->actionUndo->setIcon(QIcon::fromTheme(QString::fromUtf8("edit-undo"))); ui->actionUndo->setShortcuts(QKeySequence::Undo); @@ -119,14 +119,14 @@ void CMainWindow::initializeAction() ui->actionUndo->setEnabled(m_pUndoStack->canUndo()); ui->actionRedo->setEnabled(m_pUndoStack->canRedo()); - ui->actionDelete->setShortcut(QKeySequence::Delete); + ui->actionDelete->setShortcut(QKeySequence::Delete);*/ - connect(ui->actionDelete, SIGNAL(triggered()), this, SLOT(onSignal_deleteItem())); - connect(ui->actionZoomIn, SIGNAL(triggered()), this, SLOT(onAction_zoomIn())); - connect(ui->actionZoomOut, SIGNAL(triggered()), this, SLOT(onAction_zoomOut())); - connect(ui->actionZoomFit, SIGNAL(triggered()), this, SLOT(onAction_zoomFit())); - connect(ui->actionGroup, SIGNAL(triggered()), this, SLOT(onAction_createGroup())); - connect(ui->actionUngroup, SIGNAL(triggered()), this, SLOT(onAction_destroyGroup())); + //connect(ui->actionDelete, SIGNAL(triggered()), this, SLOT(onSignal_deleteItem())); + //connect(ui->actionZoomIn, SIGNAL(triggered()), this, SLOT(onAction_zoomIn())); + //connect(ui->actionZoomOut, SIGNAL(triggered()), this, SLOT(onAction_zoomOut())); + //connect(ui->actionZoomFit, SIGNAL(triggered()), this, SLOT(onAction_zoomFit())); + //connect(ui->actionGroup, SIGNAL(triggered()), this, SLOT(onAction_createGroup())); + //connect(ui->actionUngroup, SIGNAL(triggered()), this, SLOT(onAction_destroyGroup())); connect(m_pTopologyView,&TopologyView::entityCreate,m_pDiagramCavas,&DiagramCavas::onSignal_createEntity); connect(m_pTopologyView,&TopologyView::entityChange,m_pDiagramCavas,&DiagramCavas::onSignal_changeEntity); diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 78e95c0..f5430d6 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -74,18 +74,6 @@ - - - - - - - - - - - -