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.

72 line
2.2 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. if (state()) {
  12. painter->setPen(QPen(Qt::green, 2)); // 激活状态
  13. } else {
  14. painter->setPen(QPen(Qt::black, 1)); // 未激活状态
  15. }
  16. painter->drawLine(-12, 0, -4, 0);
  17. painter->drawLine(-4, -8, -4, 8);
  18. painter->drawLine(4, -8, 4, 8);
  19. painter->drawLine(4, 0, 12, 0);
  20. // 锚点
  21. painter->setBrush(Qt::darkGray);
  22. painter->setPen(Qt::NoPen);
  23. painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左
  24. painter->drawEllipse(QPointF(18, 0), 4, 4); // 右
  25. }
  26. else if (type_ == "常闭") {
  27. if (!state()) {
  28. painter->setPen(QPen(Qt::green, 2)); // 激活状态
  29. } else {
  30. painter->setPen(QPen(Qt::black, 1)); // 未激活状态
  31. }
  32. painter->drawLine(-15, -10, 15, 10); // 对角线
  33. painter->drawLine(-12, 0, -4, 0);
  34. painter->drawLine(-4, -8, -4, 8);
  35. painter->drawLine(4, -8, 4, 8);
  36. painter->drawLine(4, 0, 12, 0);
  37. // 锚点
  38. painter->setBrush(Qt::darkGray);
  39. painter->setPen(Qt::NoPen);
  40. painter->drawEllipse(QPointF(-18, 0), 4, 4); // 左
  41. painter->drawEllipse(QPointF(18, 0), 4, 4); // 右
  42. }
  43. if (!registerId_.isEmpty()) {
  44. painter->save();
  45. painter->setFont(QFont("Arial", 8));
  46. painter->setPen(Qt::black);
  47. // 在元件底部居中绘制寄存器ID
  48. QString text = QString("%1: %2").arg(registerId()).arg(registerValue_);
  49. painter->drawText(boundingRect(), Qt::AlignBottom | Qt::AlignHCenter, text);
  50. painter->restore();
  51. }
  52. if (option->state & QStyle::State_Selected) {
  53. QPen pen(Qt::DashLine);
  54. pen.setColor(Qt::blue);
  55. pen.setWidth(2);
  56. painter->setPen(pen);
  57. painter->setBrush(Qt::NoBrush);
  58. painter->drawRect(boundingRect());
  59. }
  60. }
  61. bool Contact::state() const
  62. {
  63. return registerValue_ > 0;
  64. }