#include "contact.h" #include #include Contact::Contact(const QString &type) : Item(type) { } void Contact::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) { painter->setRenderHint(QPainter::Antialiasing); if (type_ == "常开") { if (state()) { painter->setPen(QPen(Qt::green, 2)); // 激活状态 } else { painter->setPen(QPen(Qt::black, 1)); // 未激活状态 } 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_ == "常闭") { if (!state()) { painter->setPen(QPen(Qt::green, 2)); // 激活状态 } else { painter->setPen(QPen(Qt::black, 1)); // 未激活状态 } 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); // 右 } if (!registerId_.isEmpty()) { painter->save(); painter->setFont(QFont("Arial", 8)); painter->setPen(Qt::black); // 在元件底部居中绘制寄存器ID QString text = QString("%1: %2").arg(registerId()).arg(registerValue_); painter->drawText(boundingRect(), Qt::AlignBottom | Qt::AlignHCenter, text); painter->restore(); } 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()); } } bool Contact::state() const { return registerValue_ > 0; }