#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; }