#include "item.h" #include "connection.h" #include #include #include #include Item::Item(const QString &type, QGraphicsItem *parent) : QGraphicsObject(parent), type_(type) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges); } QRectF Item::boundingRect() const { return QRectF(-22, -15, 44, 30); } //void Item::paint(QPainter *painter, // const QStyleOptionGraphicsItem * option, // QWidget *) //{ // painter->setRenderHint(QPainter::Antialiasing); // if (type_ == "线圈") { // // 绘制线圈样式: 两边线段+中间椭圆 // painter->drawLine(-12, 0, -5, 0); // painter->drawEllipse(QRectF(-5, -8, 10, 16)); // painter->drawLine(5, 0, 12, 0); // // 画锚点 // painter->setBrush(Qt::darkGray); // painter->setPen(Qt::NoPen); // painter->drawEllipse(QPointF(-12, 0), 4, 4); // 左锚点 // painter->drawEllipse(QPointF(12, 0), 4, 4); // 右锚点 // } // else if (type_ == "常开") { // painter->drawLine(-12, 0, -4, 0); // painter->drawLine(-4, -8, -4, 8); // painter->drawLine(4, -8, 4, 8); // painter->drawLine(4, 0, 12, 0); // // 锚点 // painter->setBrush(Qt::darkGray); // painter->setPen(Qt::NoPen); // painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左 // painter->drawEllipse(QPointF(18, 0), 4, 4); // 右 // } // else if (type_ == "常闭") { // painter->drawLine(-15, -10, 15, 10); // 对角线 // painter->drawLine(-12, 0, -4, 0); // painter->drawLine(-4, -8, -4, 8); // painter->drawLine(4, -8, 4, 8); // painter->drawLine(4, 0, 12, 0); // // 锚点 // painter->setBrush(Qt::darkGray); // painter->setPen(Qt::NoPen); // painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左 // painter->drawEllipse(QPointF(18, 0), 4, 4); // 右 // } // else if (type_ == "比较") { // painter->drawRect(QRectF(-12, -8, 24, 16)); // painter->setFont(QFont("Arial", 8)); // painter->drawText(QRectF(-10, -8, 20, 16), Qt::AlignCenter, "CP"); // // 锚点 // painter->setBrush(Qt::darkGray); // painter->setPen(Qt::NoPen); // painter->drawEllipse(QPointF(-18, 0), 4, 4); // painter->drawEllipse(QPointF(18, 0), 4, 4); // } // if (option->state & QStyle::State_Selected) { // QPen pen(Qt::DashLine); // pen.setColor(Qt::blue); // pen.setWidth(2); // painter->setPen(pen); // painter->setBrush(Qt::NoBrush); // painter->drawRect(boundingRect()); // } //} QPointF Item::anchorPos(AnchorType type) const { return mapToScene(type == Left ? QPointF(-18, 0) : QPointF(18, 0)); } void Item::addConnection(Connection* conn) { if (!connections_.contains(conn)) connections_.append(conn); } void Item::removeConnection(Connection* conn) { connections_.removeAll(conn); } QList Item::connections() { return connections_; } QString Item::itemType() { return type_; } QVariant Item::itemChange(GraphicsItemChange change, const QVariant &value) { if (change == QGraphicsItem::ItemPositionChange) { for (Connection* conn : connections_) conn->updatePosition(); } return QGraphicsObject::itemChange(change, value); } void Item::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { QMenu menu; QAction* copyAct = menu.addAction("复制"); QAction* deleteAct = menu.addAction("删除"); QAction* selected = menu.exec(event->screenPos()); if (selected == copyAct) { emit requestCopy(this); } if (selected == deleteAct) { emit requestDelete(this); } }