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.

57 line
1.7 KiB

  1. #include "contact.h"
  2. #include <QPainter>
  3. #include <QStyleOptionGraphicsItem>
  4. Contact::Contact(const QString &type) : Item(type)
  5. {
  6. }
  7. void Contact::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
  8. {
  9. painter->setRenderHint(QPainter::Antialiasing);
  10. if (type_ == "常开") {
  11. painter->drawLine(-12, 0, -4, 0);
  12. painter->drawLine(-4, -8, -4, 8);
  13. painter->drawLine(4, -8, 4, 8);
  14. painter->drawLine(4, 0, 12, 0);
  15. // 锚点
  16. painter->setBrush(Qt::darkGray);
  17. painter->setPen(Qt::NoPen);
  18. painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左
  19. painter->drawEllipse(QPointF(18, 0), 4, 4); // 右
  20. }
  21. else if (type_ == "常闭") {
  22. painter->drawLine(-15, -10, 15, 10); // 对角线
  23. painter->drawLine(-12, 0, -4, 0);
  24. painter->drawLine(-4, -8, -4, 8);
  25. painter->drawLine(4, -8, 4, 8);
  26. painter->drawLine(4, 0, 12, 0);
  27. // 锚点
  28. painter->setBrush(Qt::darkGray);
  29. painter->setPen(Qt::NoPen);
  30. painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左
  31. painter->drawEllipse(QPointF(18, 0), 4, 4); // 右
  32. }
  33. if (!registerId_.isEmpty()) {
  34. painter->save();
  35. painter->setFont(QFont("Arial", 8));
  36. painter->setPen(Qt::black);
  37. // 在元件底部居中绘制寄存器ID
  38. painter->drawText(boundingRect().adjusted(0, 20, 0, 0),
  39. Qt::AlignCenter, registerId_);
  40. painter->restore();
  41. }
  42. if (option->state & QStyle::State_Selected) {
  43. QPen pen(Qt::DashLine);
  44. pen.setColor(Qt::blue);
  45. pen.setWidth(2);
  46. painter->setPen(pen);
  47. painter->setBrush(Qt::NoBrush);
  48. painter->drawRect(boundingRect());
  49. }
  50. }