#include "plceditor.h" #include #include #include PLCElement::PLCElement(Type type, QGraphicsItem *parent) : QGraphicsRectItem(parent), type(type) { setRect(0, 0, 60, 30); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); } void PLCElement::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); // 绘制基本形状 painter->setPen(QPen(Qt::black, 2)); painter->setBrush(QBrush(Qt::white)); painter->drawRect(rect()); // 绘制触点类型 painter->setPen(QPen(Qt::red, 2)); if (type == NormallyOpen) { // 常开触点 painter->drawLine(10, 15, 25, 15); painter->drawLine(35, 15, 50, 15); painter->drawLine(25, 10, 35, 20); } else { // 常闭触点 painter->drawLine(10, 15, 25, 15); painter->drawLine(35, 15, 50, 15); painter->drawLine(25, 20, 35, 10); painter->drawLine(25, 10, 35, 20); } } PLCEditor::PLCEditor(QWidget *parent) : QWidget(parent), elementCount(0) { // 创建布局 QVBoxLayout* layout = new QVBoxLayout(this); // 创建图形场景和视图 scene = new QGraphicsScene(this); scene->setSceneRect(0, 0, 800, 600); scene->setBackgroundBrush(Qt::lightGray); view = new QGraphicsView(scene, this); view->setRenderHint(QPainter::Antialiasing); layout->addWidget(view); } void PLCEditor::onNormallyOpen() { // 创建新的常开触点 PLCElement* element = new PLCElement(PLCElement::NormallyOpen); scene->addItem(element); // 放置在不同位置 element->setPos(50 + (elementCount % 10) * 80, 50 + (elementCount / 10) * 50); elementCount++; } void PLCEditor::onNormallyClosed() { // 创建新的常闭触点 PLCElement* element = new PLCElement(PLCElement::NormallyClosed); scene->addItem(element); // 放置在不同位置 element->setPos(50 + (elementCount % 10) * 80, 50 + (elementCount / 10) * 50); elementCount++; }