From 2ff639f9af2bfbe49c68975a13977cdd8b7f3df1 Mon Sep 17 00:00:00 2001 From: baiYue Date: Fri, 30 May 2025 16:28:51 +0800 Subject: [PATCH] auto diagram v0.03 --- CMakeLists.txt | 3 + common/include/global.h | 21 + diagramCavas/CMakeLists.txt | 20 + diagramCavas/include/diagramCavas.h | 9 + .../diagramEditor/diagramEditorWizard.h | 27 ++ .../include/diagramEditor/editBaseStruct.h | 20 + diagramCavas/include/diagramEditor/editBus.h | 22 + diagramCavas/include/diagramEditor/editItem.h | 28 ++ .../include/diagramEditor/editMainRect.h | 15 + .../include/diagramEditor/editPanel.h | 48 +++ .../include/diagramEditor/editRowData.h | 31 ++ .../include/diagramEditor/editScene.h | 14 + diagramCavas/include/diagramEditor/editView.h | 14 + diagramCavas/include/topologyTree.h | 17 + diagramCavas/source/diagramCavas.cpp | 40 +- .../diagramEditor/diagramEditorWizard.cpp | 42 ++ .../source/diagramEditor/editBaseStruct.cpp | 12 + diagramCavas/source/diagramEditor/editBus.cpp | 26 ++ .../source/diagramEditor/editItem.cpp | 56 +++ .../source/diagramEditor/editMainRect.cpp | 12 + .../source/diagramEditor/editPanel.cpp | 175 ++++++++ .../source/diagramEditor/editRowData.cpp | 73 ++++ .../source/diagramEditor/editScene.cpp | 12 + .../source/diagramEditor/editView.cpp | 12 + diagramCavas/ui/diagramEditorWizard.ui | 385 ++++++++++++++++++ diagramCavas/ui/editorSettingDlg.ui | 83 ++++ include/createEditor.h | 28 ++ include/mainwindow.h | 3 + source/createEditor.cpp | 40 ++ source/mainwindow.cpp | 15 +- ui/createEditor.ui | 142 +++++++ 31 files changed, 1443 insertions(+), 2 deletions(-) create mode 100644 diagramCavas/include/diagramEditor/diagramEditorWizard.h create mode 100644 diagramCavas/include/diagramEditor/editBaseStruct.h create mode 100644 diagramCavas/include/diagramEditor/editBus.h create mode 100644 diagramCavas/include/diagramEditor/editItem.h create mode 100644 diagramCavas/include/diagramEditor/editMainRect.h create mode 100644 diagramCavas/include/diagramEditor/editPanel.h create mode 100644 diagramCavas/include/diagramEditor/editRowData.h create mode 100644 diagramCavas/include/diagramEditor/editScene.h create mode 100644 diagramCavas/include/diagramEditor/editView.h create mode 100644 diagramCavas/include/topologyTree.h create mode 100644 diagramCavas/source/diagramEditor/diagramEditorWizard.cpp create mode 100644 diagramCavas/source/diagramEditor/editBaseStruct.cpp create mode 100644 diagramCavas/source/diagramEditor/editBus.cpp create mode 100644 diagramCavas/source/diagramEditor/editItem.cpp create mode 100644 diagramCavas/source/diagramEditor/editMainRect.cpp create mode 100644 diagramCavas/source/diagramEditor/editPanel.cpp create mode 100644 diagramCavas/source/diagramEditor/editRowData.cpp create mode 100644 diagramCavas/source/diagramEditor/editScene.cpp create mode 100644 diagramCavas/source/diagramEditor/editView.cpp create mode 100644 diagramCavas/ui/diagramEditorWizard.ui create mode 100644 diagramCavas/ui/editorSettingDlg.ui create mode 100644 include/createEditor.h create mode 100644 source/createEditor.cpp create mode 100644 ui/createEditor.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d4ba90..0959b72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ set(H_HEADER_FILES include/topologyView.h include/diagramView.h include/topologyTree.h + include/createEditor.h common/include/global.h common/include/tools.h @@ -78,6 +79,7 @@ set(CPP_SOURCE_FILES source/topologyView.cpp source/diagramView.cpp source/topologyTree.cpp + source/createEditor.cpp common/source/httpInterface.cpp common/source/global.cpp @@ -91,6 +93,7 @@ set(UI_FILES ui/projectModelDlg.ui ui/topologyView.ui ui/diagramView.ui + ui/createEditor.ui ) # 包含源文件目录 diff --git a/common/include/global.h b/common/include/global.h index b26c8b6..75f1f5a 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -12,6 +12,8 @@ const double g_dGriaphicsScene_Width = 800; const double g_dGriaphicsScene_Height = 600; +const int g_dEditorItem_Width = 150; +const int g_dEditorItem_Height = 80; //Q_NAMESPACE enum GraphicsItemType { @@ -277,6 +279,25 @@ struct gridInfo //grid QString uuid; QMap zoneMap; };*/ +//===================组态编辑器使用================ +struct DiagramEditorWizardInfo //组态编辑向导信息 +{ + int bus_220_num = 0; + int bus_220_division = 1; + int bus_220_circuit = 0; + int bus_110_num = 0; + int bus_110_division = 1; + int bus_110_circuit = 0; + int bus_35_num = 0; + int bus_35_division = 1; + int bus_35_circuit = 0; +}; + +enum class DiagramEditorStructType +{ + bus, //母线 + rowData //母线对应的一行数据 +}; //==================组态图使用===================== // 基础实体类型(电力元素或组态图) diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index d06f89e..198f923 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -18,6 +18,15 @@ set(DIAGRAMCAVAS_HEADER_FILES include/baseContentDlg.h include/ptExtraInfoDlg.h include/ctExtraInfoDlg.h + include/diagramEditor/editPanel.h + include/diagramEditor/editView.h + include/diagramEditor/editScene.h + include/diagramEditor/editRowData.h + include/diagramEditor/editMainRect.h + include/diagramEditor/editItem.h + include/diagramEditor/editBus.h + include/diagramEditor/editBaseStruct.h + include/diagramEditor/diagramEditorWizard.h include/graphicsDataModel/baseModel.h include/graphicsDataModel/fixedPortsModel.h include/graphicsItem/electricConnectLineItem.h @@ -68,6 +77,15 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/baseContentDlg.cpp source/ptExtraInfoDlg.cpp source/ctExtraInfoDlg.cpp + source/diagramEditor/editPanel.cpp + source/diagramEditor/editView.cpp + source/diagramEditor/editScene.cpp + source/diagramEditor/editRowData.cpp + source/diagramEditor/editMainRect.cpp + source/diagramEditor/editItem.cpp + source/diagramEditor/editBus.cpp + source/diagramEditor/editBaseStruct.cpp + source/diagramEditor/diagramEditorWizard.cpp source/graphicsDataModel/baseModel.cpp source/graphicsDataModel/fixedPortsModel.cpp source/graphicsItem/electricConnectLineItem.cpp @@ -103,6 +121,8 @@ set(UI_FILES ui/baseInfoDlg.ui ui/ptExtraInfoDlg.ui ui/ctExtraInfoDlg.ui + ui/editorSettingDlg.ui + ui/diagramEditorWizard.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/diagramCavas/include/diagramCavas.h b/diagramCavas/include/diagramCavas.h index f66cf54..9a01998 100644 --- a/diagramCavas/include/diagramCavas.h +++ b/diagramCavas/include/diagramCavas.h @@ -11,6 +11,8 @@ QT_END_NAMESPACE class DrawingPanel; class PowerEntity; +class DiagramEditorWizard; +class EditPanel; class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea { @@ -44,12 +46,19 @@ public slots: void onSignal_changeDiagram(DiagramInfo); void onSignal_deleteDiagram(DiagramInfo); void onSignal_selectDiagram(DiagramInfo); + + /******************************生成组态***********************************/ + void onSignal_createEditPanel(QString); + EditPanel* onSignal_addEditPanel(QString); + void onSignal_addEditWizard(QString); + void onSignal_wizardFinished(DiagramEditorWizardInfo); private: void removePanel(PowerEntity*); private: QMap> m_mapDrawPanel; int _pageIndex; QString _curPage; + DiagramEditorWizard* _pEditorWizard; }; #endif diff --git a/diagramCavas/include/diagramEditor/diagramEditorWizard.h b/diagramCavas/include/diagramEditor/diagramEditorWizard.h new file mode 100644 index 0000000..ac7a3f7 --- /dev/null +++ b/diagramCavas/include/diagramEditor/diagramEditorWizard.h @@ -0,0 +1,27 @@ +#ifndef DIAGRAMEDITORWIZARD_H +#define DIAGRAMEDITORWIZARD_H + +#include +#include "global.h" + +QT_BEGIN_NAMESPACE +namespace Ui { class diagramEditorWizard; } +QT_END_NAMESPACE + + +class DiagramEditorWizard : public QDialog +{ + Q_OBJECT +public: + DiagramEditorWizard(QWidget *parent = nullptr); + ~DiagramEditorWizard(); +signals: + void wizardFinish(DiagramEditorWizardInfo); +protected: + void onOkClicked(); + void onCancelClicked(); +private: + Ui::diagramEditorWizard *ui; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editBaseStruct.h b/diagramCavas/include/diagramEditor/editBaseStruct.h new file mode 100644 index 0000000..1129f3d --- /dev/null +++ b/diagramCavas/include/diagramEditor/editBaseStruct.h @@ -0,0 +1,20 @@ +#ifndef EDITBASESTRUCT_H +#define EDITBASESTRUCT_H + +//编辑器基础结构,母线,母线下的一行回路 +#include +#include "global.h" + +class EditBaseStruct : public QGraphicsWidget +{ + Q_OBJECT +public: + EditBaseStruct(QGraphicsItem *parent = 0); + virtual ~EditBaseStruct(); + void setDataType(DiagramEditorStructType t) {_dataType = t;} + DiagramEditorStructType getDataType() {return _dataType;} +protected: + DiagramEditorStructType _dataType; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editBus.h b/diagramCavas/include/diagramEditor/editBus.h new file mode 100644 index 0000000..349effe --- /dev/null +++ b/diagramCavas/include/diagramEditor/editBus.h @@ -0,0 +1,22 @@ +#ifndef EDITBUS_H +#define EDITBUS_H +//编辑器母线单元 +#include +#include "diagramEditor/editBaseStruct.h" + +class EditBus : public EditBaseStruct +{ + Q_OBJECT +public: + EditBus(QGraphicsItem *parent = nullptr); + ~EditBus(); + + void setupUI(); + void setName(QString s) {_sName = s;} +protected: + virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; +private: + QString _sName; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editItem.h b/diagramCavas/include/diagramEditor/editItem.h new file mode 100644 index 0000000..91a195d --- /dev/null +++ b/diagramCavas/include/diagramEditor/editItem.h @@ -0,0 +1,28 @@ +#ifndef EDITITEM_H +#define EDITITEM_H +//编辑器的基本图元 +#include + +class QLineEdit; +class QComboBox; +class QGraphicsGridLayout; +class QLabel; + +class EditItem : public QGraphicsWidget +{ + Q_OBJECT +public: + EditItem(QGraphicsItem *parent = nullptr); + ~EditItem(); + + void setupUI(); +protected: + virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; +private: + QLineEdit* _EditorName; + QComboBox* _ComboType; + QGraphicsGridLayout* _layout; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editMainRect.h b/diagramCavas/include/diagramEditor/editMainRect.h new file mode 100644 index 0000000..81fa4ac --- /dev/null +++ b/diagramCavas/include/diagramEditor/editMainRect.h @@ -0,0 +1,15 @@ +#ifndef EDITMAINRECT_H +#define EDITMAINRECT_H + +//编辑器操作范围 +#include + +class EditMainRect : public QGraphicsWidget +{ + Q_OBJECT +public: + EditMainRect(QGraphicsItem *parent = 0); + virtual ~EditMainRect(); +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editPanel.h b/diagramCavas/include/diagramEditor/editPanel.h new file mode 100644 index 0000000..4732361 --- /dev/null +++ b/diagramCavas/include/diagramEditor/editPanel.h @@ -0,0 +1,48 @@ +#ifndef EDITPANEL_H +#define EDITPANEL_H +//编辑文本项生成组态图 +#include +#include "global.h" + +class EditView; +class EditScene; +class QVBoxLayout; +//class QGraphicsGridLayout; +class QGraphicsLinearLayout; +class QPushButton; +class EditMainRect; +class EditRowData; +class EditBaseStruct; + +class EditPanel : public QWidget +{ + Q_OBJECT +public: + EditPanel(QWidget *parent = nullptr); + ~EditPanel(); + + void initByWizardInfo(DiagramEditorWizardInfo); +protected: + void resizeEvent(QResizeEvent* e); +public slots: + void onAddCLicked(); + void onWidthChanged(int width); +private: + void initial(); + int calHeight(); +private: + EditView* m_pEditView; + EditScene* m_pEditScene; + QVBoxLayout* _layout; + EditMainRect* _mainWidget; + //QGraphicsGridLayout* _widgetLayout; + QGraphicsLinearLayout* _widgetLayout; + QGraphicsProxyWidget* m_addBtnPro; + int _maxWidth; + int _maxHeight; + int _curRow; + QList _lstData; + QMap> _mapStruct; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editRowData.h b/diagramCavas/include/diagramEditor/editRowData.h new file mode 100644 index 0000000..704ba84 --- /dev/null +++ b/diagramCavas/include/diagramEditor/editRowData.h @@ -0,0 +1,31 @@ +#ifndef EDITROWDATA_H +#define EDITROWDATA_H +//文本编辑器中每行数据 +#include +#include +#include "diagramEditor/editBaseStruct.h" + +class QPushButton; +class QGraphicsProxyWidget; +class EditItem; + +class EditRowData : public EditBaseStruct +{ + Q_OBJECT +public: + EditRowData(QGraphicsItem *parent = nullptr); + ~EditRowData(); + + int addItems(int); +signals: + void widthChanged(int width); +public slots: + void addItem(); +private: + int calWidth(); + QGraphicsLinearLayout* m_layout; + QPushButton* _btnAdd; + QList _lstItem;; +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editScene.h b/diagramCavas/include/diagramEditor/editScene.h new file mode 100644 index 0000000..52743e3 --- /dev/null +++ b/diagramCavas/include/diagramEditor/editScene.h @@ -0,0 +1,14 @@ +#ifndef EDITSCENE_H +#define EDITSCENE_H + +#include + +class EditScene : public QGraphicsScene +{ + Q_OBJECT +public: + EditScene(QObject *parent = 0); + virtual ~EditScene(); +}; + +#endif diff --git a/diagramCavas/include/diagramEditor/editView.h b/diagramCavas/include/diagramEditor/editView.h new file mode 100644 index 0000000..7b06b32 --- /dev/null +++ b/diagramCavas/include/diagramEditor/editView.h @@ -0,0 +1,14 @@ +#ifndef EDITVIEW_H +#define EDITVIEW_H + +#include + +class EditView : public QGraphicsView +{ + Q_OBJECT +public: + explicit EditView(QWidget *parent = 0); + virtual ~EditView(); +}; + +#endif diff --git a/diagramCavas/include/topologyTree.h b/diagramCavas/include/topologyTree.h new file mode 100644 index 0000000..b5c3149 --- /dev/null +++ b/diagramCavas/include/topologyTree.h @@ -0,0 +1,17 @@ +#ifndef TOPOLOGYTREE_H +#define TOPOLOGYTREE_H + +#include + +/***************拖拽实现*************/ +class TopologyTree : public QTreeView +{ + Q_OBJECT +public: + TopologyTree(QWidget *parent = nullptr); + ~TopologyTree(); +protected: + void mouseMoveEvent(QMouseEvent *event) override; +}; + +#endif diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index eb3c911..561bf57 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -4,17 +4,20 @@ #include #include "drawingPanel.h" #include "diagramCavas.h" -#include "mainwindow.h" +//#include "mainwindow.h" #include "dataBase.h" #include "graphicsItem/graphicsBaseItem.h" #include "topologyManager.h" #include "powerEntity.h" +#include "diagramEditor/diagramEditorWizard.h" #include "componentIconManager.h" +#include "diagramEditor/editPanel.h" DiagramCavas::DiagramCavas(QWidget *parent) : QMdiArea(parent) { _pageIndex = 0; + _pEditorWizard = nullptr; } DiagramCavas::~DiagramCavas() @@ -313,3 +316,38 @@ void DiagramCavas::removePanel(PowerEntity* pEntity) } } } + +/*******************************************************/ + +void DiagramCavas::onSignal_createEditPanel(QString sName) +{ + //onSignal_addEditPanel(sName); + onSignal_addEditWizard(sName); +} + +EditPanel* DiagramCavas::onSignal_addEditPanel(QString sName) +{ + EditPanel* pPanel = new EditPanel(this); + pPanel->setWindowTitle(_curPage); + + QMdiSubWindow* pSub = this->addSubWindow(pPanel); + pPanel->show(); + return pPanel; +} + +void DiagramCavas::onSignal_addEditWizard(QString name) +{ + if(_pEditorWizard == nullptr){ + _pEditorWizard = new DiagramEditorWizard(this); + connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](DiagramEditorWizardInfo info){ + EditPanel* pPanel = onSignal_addEditPanel(name); + pPanel->initByWizardInfo(info); + }); + } + _pEditorWizard->show(); +} + +void DiagramCavas::onSignal_wizardFinished(DiagramEditorWizardInfo info) +{ + +} diff --git a/diagramCavas/source/diagramEditor/diagramEditorWizard.cpp b/diagramCavas/source/diagramEditor/diagramEditorWizard.cpp new file mode 100644 index 0000000..f43f7cc --- /dev/null +++ b/diagramCavas/source/diagramEditor/diagramEditorWizard.cpp @@ -0,0 +1,42 @@ +#include "diagramEditor/diagramEditorWizard.h" +#include "ui_diagramEditorWizard.h" + +DiagramEditorWizard::DiagramEditorWizard(QWidget *parent) + : QDialog(parent) + , ui(new Ui::diagramEditorWizard) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + ui->stackedWidget_btn->setCurrentIndex(1); + ui->btn_last->setVisible(false); + connect(ui->btn_ok,&QPushButton::clicked,this,&DiagramEditorWizard::onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,&DiagramEditorWizard::onCancelClicked); +} + +DiagramEditorWizard::~DiagramEditorWizard() +{ + delete ui; +} + +void DiagramEditorWizard::onOkClicked() +{ + DiagramEditorWizardInfo info; + info.bus_220_num = ui->cb_num_220->currentIndex(); + info.bus_220_division = ui->cb_div_220->currentText().toInt(); + info.bus_220_circuit = ui->sp_circuit_220->value(); + + info.bus_110_num = ui->cb_num_110->currentIndex(); + info.bus_110_division = ui->cb_div_110->currentText().toInt(); + info.bus_110_circuit = ui->sp_circuit_110->value(); + + info.bus_35_num = ui->cb_num_35->currentIndex(); + info.bus_35_division = ui->cb_div_35->currentText().toInt(); + info.bus_35_circuit = ui->sp_circuit_35->value(); + emit wizardFinish(info); + hide(); +} + +void DiagramEditorWizard::onCancelClicked() +{ + hide(); +} diff --git a/diagramCavas/source/diagramEditor/editBaseStruct.cpp b/diagramCavas/source/diagramEditor/editBaseStruct.cpp new file mode 100644 index 0000000..c698660 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editBaseStruct.cpp @@ -0,0 +1,12 @@ +#include "diagramEditor/editBaseStruct.h" + +EditBaseStruct::EditBaseStruct(QGraphicsItem *parent) + : QGraphicsWidget(parent) +{ + +} +EditBaseStruct::~EditBaseStruct() +{ +} + + diff --git a/diagramCavas/source/diagramEditor/editBus.cpp b/diagramCavas/source/diagramEditor/editBus.cpp new file mode 100644 index 0000000..07fbab8 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editBus.cpp @@ -0,0 +1,26 @@ +#include +#include "diagramEditor/editBus.h" + +EditBus::EditBus(QGraphicsItem *parent) + : EditBaseStruct(parent) +{ + setupUI(); +} +EditBus::~EditBus() +{ + +} + +void EditBus::setupUI() +{ + setDataType(DiagramEditorStructType::bus); +} + +void EditBus::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + QRectF rec = boundingRect(); + rec.adjust(0,rec.height()*0.45,0,-rec.height()*0.45); + painter->fillRect(rec, Qt::black); + painter->drawText(QPointF(boundingRect().x(),boundingRect().y()),_sName); + //painter->fillRect(boundingRect(), QColor(224, 238, 238)); // 背景 +} diff --git a/diagramCavas/source/diagramEditor/editItem.cpp b/diagramCavas/source/diagramEditor/editItem.cpp new file mode 100644 index 0000000..7d00f73 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editItem.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include +#include "diagramEditor/editItem.h" + +EditItem::EditItem(QGraphicsItem *parent) + : QGraphicsWidget(parent) +{ + _layout = new QGraphicsGridLayout(this); + setupUI(); +} +EditItem::~EditItem() +{ + +} + +void EditItem::setupUI() +{ + QLabel* pName = new QLabel("名称"); + QGraphicsProxyWidget* proLabelName = new QGraphicsProxyWidget; + proLabelName->setWidget(pName); + _layout->addItem(proLabelName,0,0); + + QGraphicsProxyWidget* proLeName = new QGraphicsProxyWidget; + _EditorName = new QLineEdit(); + proLeName->setWidget(_EditorName); + _layout->addItem(proLeName,0,1); + + QLabel* pType = new QLabel("类型"); + QGraphicsProxyWidget* proLabelType = new QGraphicsProxyWidget; + proLabelType->setWidget(pType); + _layout->addItem(proLabelType,1,0); + + QGraphicsProxyWidget* proComboType = new QGraphicsProxyWidget; + _ComboType = new QComboBox(); + proComboType->setWidget(_ComboType); + _layout->addItem(proComboType,1,1); + + //_layout->setSpacing(0); + //_layout->setSizePolicy(QSizePolicy()); +} + +void EditItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + painter->fillRect(boundingRect(), QColor(224, 238, 238)); // 背景 + painter->drawRect(boundingRect()); +} + +void EditItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + int a = 1; +} diff --git a/diagramCavas/source/diagramEditor/editMainRect.cpp b/diagramCavas/source/diagramEditor/editMainRect.cpp new file mode 100644 index 0000000..3fbe2f3 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editMainRect.cpp @@ -0,0 +1,12 @@ +#include "diagramEditor/editMainRect.h" + +EditMainRect::EditMainRect(QGraphicsItem *parent) + : QGraphicsWidget(parent) +{ + +} +EditMainRect::~EditMainRect() +{ +} + + diff --git a/diagramCavas/source/diagramEditor/editPanel.cpp b/diagramCavas/source/diagramEditor/editPanel.cpp new file mode 100644 index 0000000..e193b08 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editPanel.cpp @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include +#include "diagramEditor/editPanel.h" +#include "diagramEditor/editScene.h" +#include "diagramEditor/editView.h" +#include "diagramEditor/editRowData.h" +#include "diagramEditor/editMainRect.h" +#include "diagramEditor/editBus.h" +#include "global.h" +#include + +EditPanel::EditPanel(QWidget *parent) + : QWidget(parent) +{ + _maxWidth = 0; + _maxHeight = 0; + _curRow = 0; + _layout = new QVBoxLayout(this); + m_pEditScene = new EditScene(this); + //设置场景大小.前两个参数为scene的坐标远点,设置到view的中心点后,无论view如何缩放,secne的坐标原点都不会动,方便后续的位置计算 + //m_pEditScene->setSceneRect(-g_dGriaphicsScene_Width / 2, -g_dGriaphicsScene_Height / 2, g_dGriaphicsScene_Width, g_dGriaphicsScene_Height); + m_pEditScene->setSceneRect(0, 0, g_dGriaphicsScene_Width*4, g_dGriaphicsScene_Height*4); + + m_pEditView = new EditView(this); + m_pEditView->setScene(m_pEditScene); + _layout->addWidget(m_pEditView); + initial(); + setStyleSheet("backGround-color:rgb(112,128,144);"); +} + +EditPanel::~EditPanel() +{ + +} + +void EditPanel::initByWizardInfo(DiagramEditorWizardInfo info) +{ + if(info.bus_220_num != 0) + { + if(info.bus_220_num == 1) + { + QString pre = "220KVⅠ母分"; + QMap mapBus; //母线 + QMap mapRowData; //一段母线对应一行数据 + int colCount = 0; + + QGraphicsLinearLayout* layoutBus = new QGraphicsLinearLayout(); + QGraphicsLinearLayout* layoutRowData = new QGraphicsLinearLayout(); + layoutBus->setSpacing(40); + layoutRowData->setSpacing(20); + + int nPer = 0; + int nLeft = 0; + + nPer = info.bus_220_circuit/info.bus_220_division; + nLeft = info.bus_220_circuit%info.bus_220_division; + for(int i = 0; i setName(pre+QString::number(i+1)); + layoutBus->addItem(pBus); + layoutRowData->addItem(rowData); + layoutBus->setMaximumHeight(g_dEditorItem_Height); + layoutRowData->setMaximumHeight(g_dEditorItem_Height); + + int nMinWidth = -1; //每个结构大小 + if(nLeft > 0){ + nMinWidth = rowData->addItems(nPer+1); + nLeft -= 1; + } + else{ + nMinWidth = rowData->addItems(nPer); + } + if(nMinWidth == -1) + pBus->setMinimumWidth(g_dEditorItem_Width); + else + pBus->setMinimumWidth(nMinWidth); + + colCount += 1; + } + layoutBus->addStretch(); + layoutRowData->addStretch(); + _widgetLayout->addItem(layoutBus); + _widgetLayout->addItem(layoutRowData); + } + } + _widgetLayout->addStretch(); +} + +void EditPanel::resizeEvent(QResizeEvent* e) +{ + +} + +void EditPanel::onAddCLicked() +{ + /*EditRowData* row = new EditRowData(_mainWidget); + connect(row,&EditRowData::widthChanged,this,&EditPanel::onWidthChanged); + int nRow = _widgetLayout->rowCount(); + _widgetLayout->addItem(row,nRow,1); + _widgetLayout->removeItem(m_addBtnPro); + _widgetLayout->addItem(m_addBtnPro,nRow,0); + _widgetLayout->setAlignment(m_addBtnPro,Qt::AlignCenter); + _widgetLayout->setColumnMaximumWidth(1,g_dEditorItem_Width); + _widgetLayout->setRowMaximumHeight(nRow,g_dEditorItem_Height); + _widgetLayout->setColumnMinimumWidth(1,g_dEditorItem_Width); + _widgetLayout->setRowMinimumHeight(nRow,g_dEditorItem_Height); + + _lstData.append(row); + int height = calHeight(); + if(height > _maxHeight){ + QRectF rec = m_pEditScene->itemsBoundingRect(); + if(rec.width() < _maxWidth) + m_pEditScene->setSceneRect(rec.x(),rec.y(),_maxWidth,height); + else + m_pEditScene->setSceneRect(rec); // 强制更新场景尺寸 + m_pEditView->viewport()->update(); + _maxHeight = height; + } + qDebug()<itemsBoundingRect();*/ +} + +void EditPanel::onWidthChanged(int width) +{ + if(_maxWidth < width) + { + _maxWidth = width; + int x = _mainWidget->geometry().width(); + int y = _mainWidget->geometry().y(); + _mainWidget->setGeometry(x,y,_maxWidth,_maxHeight); + //m_pEditScene->setSceneRect(m_pEditScene->itemsBoundingRect()); + m_pEditScene->setSceneRect(x,y,_maxWidth,_maxHeight); + m_pEditView->viewport()->update(); + //qDebug()<sceneRect(); + } +} + +void EditPanel::initial() +{ + _mainWidget = new EditMainRect; + _widgetLayout = new QGraphicsLinearLayout(Qt::Vertical); + _widgetLayout->setSpacing(6); + _mainWidget->setLayout(_widgetLayout); + m_pEditScene->addItem(_mainWidget); + _mainWidget->setGeometry(m_pEditScene->sceneRect()); + _maxWidth = _mainWidget->rect().width(); + _maxHeight = _mainWidget->rect().height(); + m_pEditView->centerOn(0,0); + + // 添加主按钮 + /*QPushButton* m_addBtn = new QPushButton("Add Row"); + m_addBtnPro = new QGraphicsProxyWidget; + m_addBtnPro->setWidget(m_addBtn); + _widgetLayout->addItem(m_addBtnPro,0,0); + _widgetLayout->setAlignment(m_addBtnPro,Qt::AlignCenter); + _widgetLayout->activate(); + _widgetLayout->setColumnMaximumWidth(0,g_dEditorItem_Width); + _widgetLayout->setRowMaximumHeight(0,g_dEditorItem_Height); + + connect(m_addBtn,&QPushButton::clicked,this,&EditPanel::onAddCLicked);*/ +} + +int EditPanel::calHeight() +{ + int height = 0; + for(auto &data:_lstData) + { + height += data->rect().height()+6+18; + } + height += m_addBtnPro->rect().height(); + return height; +} diff --git a/diagramCavas/source/diagramEditor/editRowData.cpp b/diagramCavas/source/diagramEditor/editRowData.cpp new file mode 100644 index 0000000..77b9d32 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editRowData.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include "diagramEditor/editRowData.h" +#include "diagramEditor/editItem.h" +#include "global.h" + + +EditRowData::EditRowData(QGraphicsItem *parent) + : EditBaseStruct(parent) +{ + m_layout = new QGraphicsLinearLayout(Qt::Horizontal, this); + + // 添加按钮 + //_btnAdd = new QPushButton("Add Item"); + //QGraphicsProxyWidget* btnProxy = new QGraphicsProxyWidget(this); + //m_layout->addItem(btnProxy); + //m_layout->setAlignment(btnProxy,Qt::AlignCenter); + //btnProxy->setWidget(_btnAdd); + m_layout->addStretch(); + m_layout->setSpacing(6); + + //connect(_btnAdd, &QPushButton::clicked, this, &EditRowData::addItem); + setDataType(DiagramEditorStructType::rowData); +} +EditRowData::~EditRowData() +{ + +} + +int EditRowData::addItems(int n) +{ + if(n < 1) + return -1; + for(int i = 0;i < n; ++i) + { + EditItem* pItem = new EditItem(this); + pItem->setMaximumSize(g_dEditorItem_Width, g_dEditorItem_Height); + pItem->setMinimumSize(g_dEditorItem_Width, g_dEditorItem_Height); + _lstItem.append(pItem); + m_layout->insertItem(0,pItem); + m_layout->setStretchFactor(pItem,0); + } + int nWidth = calWidth(); + setMinimumWidth(nWidth); + return nWidth; +} + +void EditRowData::addItem() +{ + EditItem* pItem = new EditItem(this); + pItem->setMaximumSize(g_dEditorItem_Width, g_dEditorItem_Height); + pItem->setMinimumSize(g_dEditorItem_Width, g_dEditorItem_Height); + + int nWidth = calWidth(); + setMinimumWidth(nWidth); + _lstItem.append(pItem); + m_layout->insertItem(m_layout->count()-1,pItem); + m_layout->setStretchFactor(pItem,1); + + emit widthChanged(nWidth); +} + +int EditRowData::calWidth() +{ + int width = 0; + for(auto &pro:_lstItem) + { + width += pro->rect().width()+6; + } + //width += _btnAdd->width()+250; //100为add按钮的宽度 + return width; +} diff --git a/diagramCavas/source/diagramEditor/editScene.cpp b/diagramCavas/source/diagramEditor/editScene.cpp new file mode 100644 index 0000000..6d4595c --- /dev/null +++ b/diagramCavas/source/diagramEditor/editScene.cpp @@ -0,0 +1,12 @@ +#include "diagramEditor/editScene.h" + +EditScene::EditScene(QObject *parent) + : QGraphicsScene(parent) +{ + +} +EditScene::~EditScene() +{ +} + + diff --git a/diagramCavas/source/diagramEditor/editView.cpp b/diagramCavas/source/diagramEditor/editView.cpp new file mode 100644 index 0000000..e2f9598 --- /dev/null +++ b/diagramCavas/source/diagramEditor/editView.cpp @@ -0,0 +1,12 @@ +#include "diagramEditor/editView.h" + + +EditView::EditView(QWidget *parent) + : QGraphicsView(parent) +{ + this->setFocusPolicy(Qt::ClickFocus); +} +EditView::~EditView() +{ + +} diff --git a/diagramCavas/ui/diagramEditorWizard.ui b/diagramCavas/ui/diagramEditorWizard.ui new file mode 100644 index 0000000..348e1c7 --- /dev/null +++ b/diagramCavas/ui/diagramEditorWizard.ui @@ -0,0 +1,385 @@ + + + diagramEditorWizard + + + + 0 + 0 + 536 + 413 + + + + + 12 + + + + Dialog + + + + 6 + + + 0 + + + 6 + + + 6 + + + 4 + + + 0 + + + + + 0 + + + + + + + 母线设置 + + + + + + 220KV + + + + + + 数量 + + + + + + + + + + + + + 单母线 + + + + + 双母线 + + + + + + + + 分段方式 + + + + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + + + + 回路数量 + + + + + + + + + + + + + 110KV + + + + + + 数量 + + + + + + + + + + + + + 单母线 + + + + + 双母线 + + + + + + + + 分段方式 + + + + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + + + + 回路数量 + + + + + + + + + + + + + 35KV + + + + + + 数量 + + + + + + + + + + + + + 单母线 + + + + + 双母线 + + + + + + + + 分段方式 + + + + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + + + + 回路数量 + + + + + + + + + + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 139 + 20 + + + + + + + + 上一步 + + + + + + + + 80 + 22 + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 下一步 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 完成 + + + + + + + + + + + 取消 + + + + + + + + diff --git a/diagramCavas/ui/editorSettingDlg.ui b/diagramCavas/ui/editorSettingDlg.ui new file mode 100644 index 0000000..5991e86 --- /dev/null +++ b/diagramCavas/ui/editorSettingDlg.ui @@ -0,0 +1,83 @@ + + + Dialog + + + + 0 + 0 + 311 + 448 + + + + + 12 + + + + Dialog + + + + + 20 + 20 + 281 + 141 + + + + 基础信息 + + + + + 20 + 30 + 31 + 16 + + + + 名称: + + + + + + 50 + 30 + 91 + 20 + + + + + + + 20 + 60 + 31 + 16 + + + + 类型: + + + + + + 50 + 60 + 91 + 22 + + + + + + + + diff --git a/include/createEditor.h b/include/createEditor.h new file mode 100644 index 0000000..c2596f3 --- /dev/null +++ b/include/createEditor.h @@ -0,0 +1,28 @@ +#ifndef CREATEEDITOR_H +#define CREATEEDITOR_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class createEditor; } +QT_END_NAMESPACE + +class CreateEditor : public QDialog +{ + Q_OBJECT +public: + CreateEditor(QWidget *parent = nullptr); + ~CreateEditor(); + + void initial(); + void showDlg(); +signals: + void createEditor(QString); +public slots: + void onOkClicked(); + void onCancelClicked(); +private: + Ui::createEditor *ui; +}; + +#endif diff --git a/include/mainwindow.h b/include/mainwindow.h index bf9b51e..b2cae64 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -21,6 +21,7 @@ class LoadPageDlg; class projectModelDlg; class TopologyView; class DiagramView; +class CreateEditor; class CMainWindow : public QMainWindow { @@ -50,6 +51,7 @@ private slots: void onSignal_deleteItem(); void onSignal_loadPage(); + void onAction_createEditor(); public: GraphicElementsPanel* graphicsElementsPanel() const; @@ -74,5 +76,6 @@ private: GraphicElementsPanel* m_pGraphicElementsPanel; LoadPageDlg* m_pLoadPageDlg; projectModelDlg* m_pProjectModelDlg; + CreateEditor* m_pCreateEdiotr; }; #endif // MAINWINDOW_H diff --git a/source/createEditor.cpp b/source/createEditor.cpp new file mode 100644 index 0000000..9f949bc --- /dev/null +++ b/source/createEditor.cpp @@ -0,0 +1,40 @@ +#include +#include "createEditor.h" +#include "ui_createEditor.h" + +CreateEditor::CreateEditor(QWidget *parent) + : QDialog(parent) + , ui(new Ui::createEditor) +{ + ui->setupUi(this); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + initial(); +} + +CreateEditor::~CreateEditor() +{ + delete ui; +} + +void CreateEditor::initial() +{ + connect(ui->btn_ok,&QPushButton::clicked,this,onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,onCancelClicked); +} + +void CreateEditor::showDlg() +{ + show(); + ui->le_name->clear(); +} + +void CreateEditor::onOkClicked() +{ + emit createEditor(ui->le_name->text()); + hide(); +} + +void CreateEditor::onCancelClicked() +{ + hide(); +} diff --git a/source/mainwindow.cpp b/source/mainwindow.cpp index 031e48a..ef51fc3 100644 --- a/source/mainwindow.cpp +++ b/source/mainwindow.cpp @@ -26,6 +26,7 @@ #include "projectModelDlg.h" #include "topologyView.h" #include "diagramView.h" +#include "createEditor.h" //using namespace ads; @@ -39,6 +40,7 @@ CMainWindow::CMainWindow(QWidget *parent) m_pLoadPageDlg = nullptr; m_pTopologyView = nullptr; m_pDiagramView = nullptr; + m_pCreateEdiotr = nullptr; initializeDockUi(); initializeAction(); @@ -140,6 +142,9 @@ void CMainWindow::initializeAction() connect(ui->actionSave,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_savePage); connect(ui->actionDelete,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_deletePage); + QAction* actNewEditor = ui->menuFile->addAction(QString::fromWCharArray(L"新建组态")); + connect(actNewEditor,&QAction::triggered,this,&CMainWindow::onAction_createEditor); + QAction* actRun = ui->menuMode->addAction(QString::fromWCharArray(L"运行")); connect(actRun,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_runPage); @@ -203,7 +208,6 @@ void CMainWindow::onAction_editProject() void CMainWindow::onAction_editBay() { - } void CMainWindow::onSignal_addItem(QGraphicsItem* item) @@ -236,6 +240,15 @@ void CMainWindow::onSignal_loadPage() m_pLoadPageDlg->show(); } +void CMainWindow::onAction_createEditor() +{ + if(m_pCreateEdiotr == nullptr){ + m_pCreateEdiotr = new CreateEditor(this); + connect(m_pCreateEdiotr,&CreateEditor::createEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel); + } + m_pCreateEdiotr->showDlg(); +} + GraphicElementsPanel* CMainWindow::graphicsElementsPanel() const { if(m_pGraphicElementsPanel) diff --git a/ui/createEditor.ui b/ui/createEditor.ui new file mode 100644 index 0000000..b0815f7 --- /dev/null +++ b/ui/createEditor.ui @@ -0,0 +1,142 @@ + + + createEditor + + + + 0 + 0 + 215 + 126 + + + + + 12 + + + + Dialog + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 16777215 + 21 + + + + background-color: rgb(164, 164, 164); + + + + 8 + + + 0 + + + 0 + + + 0 + + + + + + 12 + + + + color: rgb(0, 0, 0); + + + 新建 + + + + + + + Qt::Orientation::Horizontal + + + + 176 + 18 + + + + + + + + + + + + 10 + + + 10 + + + 10 + + + + + 20 + + + 20 + + + + + 名称: + + + + + + + + + + + + 确定 + + + + + + + 取消 + + + + + + + + + + +