DiagramDesigner/diagramCavas/source/diagramEditor/editPanel.cpp

176 lines
5.9 KiB
C++
Raw Normal View History

2025-05-30 16:28:51 +08:00
#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;
}