// LayoutBuilder.h #pragma once #include #include "editContainerItem.h" #include "dataModel.h" #include "common/core_model/topology.h" class EditPanel; class EditBaseItem; class LayoutBuilder { public: struct BuildResult { EditContainerItem* container = nullptr; QList bayItems; QList deviceItems; }; explicit LayoutBuilder(EditPanel* panel); virtual ~LayoutBuilder() = default; // 构建一个容器 virtual BuildResult buildContainer(const BlockMap& blockMap); // 构建行布局 static QGraphicsLinearLayout* createRowLayout(); // 构建垂直布局 static QGraphicsLinearLayout* createVerticalLayout(); // 构建水平布局 static QGraphicsLinearLayout* createHorizontalLayout(); // 添加间隔占位符 static EditBaseItem* createSpacerItem(); // 为垂直布局添加拉伸 static void addStretchToVerticalLayout(QGraphicsLinearLayout* layout); protected: EditPanel* m_panel = nullptr; // 处理一个Block virtual EditBaseItem* processBlock(BlockDataPtr block, QList& bayItems, QList& deviceItems); // 处理一个层的所有Blocks void processLayer(const QList& blocks, QGraphicsLinearLayout* layerLayout, QList& bayItems, QList& deviceItems); // 连接信号 void connectSignals(EditBaseItem* item); void connectContainerSignals(EditContainerItem* container); protected: static constexpr int TOTAL_LAYERS = 4; // 总共4层 static constexpr int MIN_CONTAINER_WIDTH = 100; // 最小容器宽度 };