|
- #include "item.h"
- #include "connection.h"
- #include <QMenu>
- #include <QPainter>
- #include <QStyleOptionGraphicsItem>
- #include <QGraphicsSceneContextMenuEvent>
-
- 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<Connection *> 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);
- }
- }
|