#include "plceditorwidget.h" #include "plcwidgetfactory.h" #include #include #include PlcEditorWidget::PlcEditorWidget(QWidget* parent) : QWidget(parent) { QHBoxLayout* layout = new QHBoxLayout(this); // 工具栏初始化 plcToolbar = new QListWidget(this); plcToolbar->addItem("常开"); plcToolbar->addItem("常闭"); plcToolbar->addItem("线圈"); plcToolbar->addItem("比较"); plcToolbar->setFixedWidth(100); // === 画布(场景+视图)修复配置 === plcScene = new QGraphicsScene(this); // 1. 设置明确的场景边界 plcScene->setSceneRect(0, 0, 1000, 800); plcEditArea = new QGraphicsView(plcScene, this); // 2. 禁用视图自身的拖拽模式 plcEditArea->setDragMode(QGraphicsView::NoDrag); // 3. 禁用滚动条(可选) plcEditArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); plcEditArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 4. 确保坐标1:1映射 plcEditArea->setTransform(QTransform()); plcEditArea->setResizeAnchor(QGraphicsView::NoAnchor); layout->addWidget(plcToolbar); layout->addWidget(plcEditArea); connect(plcToolbar, &QListWidget::itemClicked, this, &PlcEditorWidget::onToolbarClicked); } void PlcEditorWidget::onToolbarClicked(QListWidgetItem* item) { QString type = item->text(); auto controlItem = PlcWidgetFactory::createItem(type); if (controlItem) { controlItem->setPos(50, 50); // 固定初始位置 plcScene->addItem(controlItem); } }