auto diagram v0.03

This commit is contained in:
baiYue 2025-05-30 16:28:51 +08:00
parent b39b15d551
commit 2ff639f9af
31 changed files with 1443 additions and 2 deletions

View File

@ -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
)
#

View File

@ -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<QString,zoneInfo> 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 //母线对应的一行数据
};
//==================组态图使用=====================
// 基础实体类型(电力元素或组态图)

View File

@ -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)

View File

@ -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<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel;
int _pageIndex;
QString _curPage;
DiagramEditorWizard* _pEditorWizard;
};
#endif

View File

@ -0,0 +1,27 @@
#ifndef DIAGRAMEDITORWIZARD_H
#define DIAGRAMEDITORWIZARD_H
#include <QDialog>
#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

View File

@ -0,0 +1,20 @@
#ifndef EDITBASESTRUCT_H
#define EDITBASESTRUCT_H
//编辑器基础结构,母线,母线下的一行回路
#include <QGraphicsWidget>
#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

View File

@ -0,0 +1,22 @@
#ifndef EDITBUS_H
#define EDITBUS_H
//编辑器母线单元
#include <QGraphicsWidget>
#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

View File

@ -0,0 +1,28 @@
#ifndef EDITITEM_H
#define EDITITEM_H
//编辑器的基本图元
#include <QGraphicsWidget>
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

View File

@ -0,0 +1,15 @@
#ifndef EDITMAINRECT_H
#define EDITMAINRECT_H
//编辑器操作范围
#include <QGraphicsWidget>
class EditMainRect : public QGraphicsWidget
{
Q_OBJECT
public:
EditMainRect(QGraphicsItem *parent = 0);
virtual ~EditMainRect();
};
#endif

View File

@ -0,0 +1,48 @@
#ifndef EDITPANEL_H
#define EDITPANEL_H
//编辑文本项生成组态图
#include <QWidget>
#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<EditRowData*> _lstData;
QMap<int,QMap<int,EditBaseStruct*>> _mapStruct;
};
#endif

View File

@ -0,0 +1,31 @@
#ifndef EDITROWDATA_H
#define EDITROWDATA_H
//文本编辑器中每行数据
#include <QGraphicsWidget>
#include <QGraphicsLinearLayout>
#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<EditItem*> _lstItem;;
};
#endif

View File

@ -0,0 +1,14 @@
#ifndef EDITSCENE_H
#define EDITSCENE_H
#include <QGraphicsScene>
class EditScene : public QGraphicsScene
{
Q_OBJECT
public:
EditScene(QObject *parent = 0);
virtual ~EditScene();
};
#endif

View File

@ -0,0 +1,14 @@
#ifndef EDITVIEW_H
#define EDITVIEW_H
#include <QGraphicsView>
class EditView : public QGraphicsView
{
Q_OBJECT
public:
explicit EditView(QWidget *parent = 0);
virtual ~EditView();
};
#endif

View File

@ -0,0 +1,17 @@
#ifndef TOPOLOGYTREE_H
#define TOPOLOGYTREE_H
#include <QTreeView>
/***************拖拽实现*************/
class TopologyTree : public QTreeView
{
Q_OBJECT
public:
TopologyTree(QWidget *parent = nullptr);
~TopologyTree();
protected:
void mouseMoveEvent(QMouseEvent *event) override;
};
#endif

View File

@ -4,17 +4,20 @@
#include <QStandardItem>
#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)
{
}

View File

@ -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();
}

View File

@ -0,0 +1,12 @@
#include "diagramEditor/editBaseStruct.h"
EditBaseStruct::EditBaseStruct(QGraphicsItem *parent)
: QGraphicsWidget(parent)
{
}
EditBaseStruct::~EditBaseStruct()
{
}

View File

@ -0,0 +1,26 @@
#include <QPainter>
#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)); // 背景
}

View File

@ -0,0 +1,56 @@
#include <QGraphicsGridLayout>
#include <QLabel>
#include <QGraphicsProxyWidget>
#include <QLineEdit>
#include <QComboBox>
#include <QPainter>
#include <QSizePolicy>
#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;
}

View File

@ -0,0 +1,12 @@
#include "diagramEditor/editMainRect.h"
EditMainRect::EditMainRect(QGraphicsItem *parent)
: QGraphicsWidget(parent)
{
}
EditMainRect::~EditMainRect()
{
}

View File

@ -0,0 +1,175 @@
#include <QVBoxLayout>
#include <QGraphicsWidget>
#include <QGraphicsGridLayout>
#include <QPushButton>
#include <QGraphicsProxyWidget>
#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 <QDebug>
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<int,EditBaseStruct*> mapBus; //母线
QMap<int,EditBaseStruct*> 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 <info.bus_220_division;++i){
EditBus* pBus = new EditBus(_mainWidget);
EditRowData* rowData = new EditRowData(_mainWidget);
pBus->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()<<m_pEditScene->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()<<m_pEditScene->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;
}

View File

@ -0,0 +1,73 @@
#include <QLabel>
#include <QGraphicsProxyWidget>
#include <QPushButton>
#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;
}

View File

@ -0,0 +1,12 @@
#include "diagramEditor/editScene.h"
EditScene::EditScene(QObject *parent)
: QGraphicsScene(parent)
{
}
EditScene::~EditScene()
{
}

View File

@ -0,0 +1,12 @@
#include "diagramEditor/editView.h"
EditView::EditView(QWidget *parent)
: QGraphicsView(parent)
{
this->setFocusPolicy(Qt::ClickFocus);
}
EditView::~EditView()
{
}

View File

@ -0,0 +1,385 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diagramEditorWizard</class>
<widget class="QDialog" name="diagramEditorWizard">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>536</width>
<height>413</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<property name="horizontalSpacing">
<number>4</number>
</property>
<property name="verticalSpacing">
<number>0</number>
</property>
<item row="0" column="0" colspan="4">
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_bus">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>母线设置</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>220KV</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,3,1,3,1,3">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>数量</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_num_220">
<item>
<property name="text">
<string>无</string>
</property>
</item>
<item>
<property name="text">
<string>单母线</string>
</property>
</item>
<item>
<property name="text">
<string>双母线</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>分段方式</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_div_220">
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>回路数量</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sp_circuit_220"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>110KV</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1,3,1,3,1,3">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>数量</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_num_110">
<item>
<property name="text">
<string>无</string>
</property>
</item>
<item>
<property name="text">
<string>单母线</string>
</property>
</item>
<item>
<property name="text">
<string>双母线</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>分段方式</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_div_110">
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>回路数量</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sp_circuit_110"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>35KV</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4" stretch="1,3,1,3,1,3">
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>数量</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_num_35">
<item>
<property name="text">
<string>无</string>
</property>
</item>
<item>
<property name="text">
<string>单母线</string>
</property>
</item>
<item>
<property name="text">
<string>双母线</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>分段方式</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_div_35">
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>回路数量</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sp_circuit_35"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_circuit"/>
</widget>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>139</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btn_last">
<property name="text">
<string>上一步</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QStackedWidget" name="stackedWidget_btn">
<property name="maximumSize">
<size>
<width>80</width>
<height>22</height>
</size>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_next">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="btn_next">
<property name="text">
<string>下一步</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_ok">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="btn_ok">
<property name="text">
<string>完成</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="btn_cancel">
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>311</width>
<height>448</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>281</width>
<height>141</height>
</rect>
</property>
<property name="title">
<string>基础信息</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>31</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>名称:</string>
</property>
</widget>
<widget class="QLineEdit" name="le_name">
<property name="geometry">
<rect>
<x>50</x>
<y>30</y>
<width>91</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>31</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>类型:</string>
</property>
</widget>
<widget class="QComboBox" name="comboBox">
<property name="geometry">
<rect>
<x>50</x>
<y>60</y>
<width>91</width>
<height>22</height>
</rect>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

28
include/createEditor.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef CREATEEDITOR_H
#define CREATEEDITOR_H
#include <QDialog>
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

View File

@ -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

40
source/createEditor.cpp Normal file
View File

@ -0,0 +1,40 @@
#include <QPushButton>
#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();
}

View File

@ -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)

142
ui/createEditor.ui Normal file
View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>createEditor</class>
<widget class="QDialog" name="createEditor">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>215</width>
<height>126</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(164, 164, 164);</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>8</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(0, 0, 0);</string>
</property>
<property name="text">
<string>新建</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>176</width>
<height>18</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="horizontalSpacing">
<number>10</number>
</property>
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,3">
<property name="leftMargin">
<number>20</number>
</property>
<property name="rightMargin">
<number>20</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>名称:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_name"/>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btn_ok">
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btn_cancel">
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>