You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 line
1.6 KiB

  1. #include "plceditorwidget.h"
  2. #include "plcwidgetfactory.h"
  3. #include <QHBoxLayout>
  4. #include <QGraphicsScene>
  5. #include <QGraphicsView>
  6. PlcEditorWidget::PlcEditorWidget(QWidget* parent)
  7. : QWidget(parent)
  8. {
  9. QHBoxLayout* layout = new QHBoxLayout(this);
  10. // 工具栏初始化
  11. plcToolbar = new QListWidget(this);
  12. plcToolbar->addItem("常开");
  13. plcToolbar->addItem("常闭");
  14. plcToolbar->addItem("线圈");
  15. plcToolbar->addItem("比较");
  16. plcToolbar->setFixedWidth(100);
  17. // === 画布(场景+视图)修复配置 ===
  18. plcScene = new QGraphicsScene(this);
  19. // 1. 设置明确的场景边界
  20. plcScene->setSceneRect(0, 0, 1000, 800);
  21. plcEditArea = new QGraphicsView(plcScene, this);
  22. // 2. 禁用视图自身的拖拽模式
  23. plcEditArea->setDragMode(QGraphicsView::NoDrag);
  24. // 3. 禁用滚动条(可选)
  25. plcEditArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  26. plcEditArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  27. // 4. 确保坐标1:1映射
  28. plcEditArea->setTransform(QTransform());
  29. plcEditArea->setResizeAnchor(QGraphicsView::NoAnchor);
  30. layout->addWidget(plcToolbar);
  31. layout->addWidget(plcEditArea);
  32. connect(plcToolbar, &QListWidget::itemClicked,
  33. this, &PlcEditorWidget::onToolbarClicked);
  34. }
  35. void PlcEditorWidget::onToolbarClicked(QListWidgetItem* item) {
  36. QString type = item->text();
  37. auto controlItem = PlcWidgetFactory::createItem(type);
  38. if (controlItem) {
  39. controlItem->setPos(50, 50); // 固定初始位置
  40. plcScene->addItem(controlItem);
  41. }
  42. }